go程序的基本结构

一个可以最简单的可运行的go程序需要满足下面两个条件:

  • 有一个main()函数
  • main()函数在main包中

例如: 在go语言中的 hello world 程序如下:

// main.go
package main func main() {
println("hello world");
}

程序中的 package 关键字,用来声明文件所属的包(文件所属的包跟文件名是没有关系的),每一个go文件都需要有一个包声明; 而 func 关键字用来定义函数, 这里我们定义了一个main函数(main函数的形式是固定的)。println 函数是用来向标准输出打印数据的,不过我们一般情况下是不使用它的。

go在编译程序时,会自动在语句的结尾加上分号,所有这里函数的第一的大括号,必须与()在同一行,否则返回就会加在()之后,就会出现错误,后面的一些流程控制语句也是如此

运行程序:

go build main.go  // 编译程序
./main // 运行程序

我们可以将两步合成一步:

go run main.go    // 不会生成中间文件

在运行go程序时的入口就是 main 包下的 main 函数。

变量

go语言使用 var 声明或者定义变量,它可以用在函数之外定义,此时就是全局变量;而在函数内声明时,就是局部变量。

还有一种简略的定义方式,使用 := 来定义,这种方式只能用在函数中,即定义局部变量

且局部变量声明之后必须使用

package main

import "fmt"

var age int = 10   // 显式的声明变量的类型 int
var name = "Tom" // go也可以自动推断处变量类型,这里是 string func main() {
var sex = "man" hello := "hello" // 简略声明方式 fmt.Println(sex)
fmt.Println(hello + "world")
}

这里我们定义了两个全局变量 name 和 age, 还定义了两个局部变量 sex 和 hello, 在 go 语言中,全局变量可以声明之后不是有,但是局部变量一旦声明必须使用,否则编译器会报错;

注意: 这里我们使用 import 关键字引入了一个 fmt 的包,在go程序中我们一般都应该使用 fmt 包中的函数来打印数据,而不是前面的println

基本数据类型:

类型 含义 默认值
bool 布尔值 false
byte 字节,uint8 0
rune Unicode码点,int32 0
int,uint 与系统相关的有/无符号整数 0
int8,uint8 8位有/无符号整数 0
int16,uint16 16位有/无符号整数 0
int32,uint32 32位有/无符号整数 0
int64,uint64 64位有/无符号整数 0
float32 32位浮点数 0.0
float64 64位浮点数 0.0
complex64 64位复数 0+0i
complex128 128位复数 0+0i
string 字符串 “”

这些是比较基本的类型,还有一些类型,后面用到了再说

常量

常量的定义方式与变量类型,不过使用的是 const 关键字:

const PI float32 = 3.14159
const USERNAME = "root" // 自动类型推断

常量必须在定义时,就初始化,并且一经定义便不可更改。

流程控制语句

if语句

package main

import "fmt"

func main() {
a := 10
if a > 5 {
fmt.Println("a 大于 5")
} else {
fmt.Println("a 小于 5")
}
}

同样的这里的 左大括号“{”必须与 if 或者 else 在同一行, 且这里 else 必须与 if 的右大括号“}”在同一行。

go语言中没有三元运算符

switch语句

switch (n){

    case 1:
fmt.Println("n == 1")
case 2:
fmt.Println("n == 2")
default:
fmt.Println("n is default")
}

go中的 switch 是不需要 break 语句的,默认自动终止一个case; 如果需要继续执行下一个,使用fallthrough,此时不会判断条件

这里switch语句还可以包含初始化语句,使用分号”;”分隔,且case的条件,不仅仅可以是常量值,还可以是比较表达式;

for循环

go语言支持三种循环方式:

// 1. 常见的for循环,类似于C语言的循环,不过条件可以不用括号
for i := 0; i < 10; i++ {
fmt.Println(i);
} // 2. 类while语法
i := 10
for i > 0 {
fmt.Println(i)
i--
} // 同样的,无限循环是这样,省略条件
for {
//...
} // 3. for .. range,可以用来循环字符串,数组,map,channel等等
// range返回 (索引值, 值)或者(键, 值); 如果只有一个接收参数,则会忽略第二个返回值
s := "hello" for i := range s { // 这里循环的是string的索引
fmt.Println(s[i])
}

标签,goto, break, continue

go还支持标签(区分大小写),可以使用goto跳转到标签,break 可⽤于 for、 switch、 select,⽽ continue 仅能⽤于 for 循环。

go语言学习-基础知识的更多相关文章

  1. Tcl语言学习--基础知识

    一.脚本.命令和单词符号 一个TCL脚本可以包含一个或多个命令.命令之间必须用换行符或分号隔开. 1.关键字/变量 变量是程序的基础变量组成:变量名.变量值变量名要求:任何字符串都可以作为变量名,区分 ...

  2. Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识

    JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...

  3. c语言学习基础:[1]开发工具介绍

    标签:c语言 1 2 3 4 分步阅读 学习编程语言的童鞋们一开始接触到的最多的估计就是C语言了,其次才是什么java.c++等,可以说学习c语言是我们走向编程世界的一座桥梁,学好它,对于我们学习和研 ...

  4. Matrix学习——基础知识

    以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明. 首先大家看看下面这个3 x 3的矩阵,这个矩阵被分割成4部 ...

  5. JAVA学习基础知识总结(原创)

    (未经博主允许,禁止转载!) 一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...

  6. 【值得收藏】C语言入门基础知识大全!从C语言程序结构到删库跑路!

    01 C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成.格式.以及良好的书写风格,使小伙伴对c语言有个初步认识. 例1:计算两个整数之和的c程序: #include main() { ...

  7. iOS开发系列--C语言之基础知识

    概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...

  8. ansible学习基础知识和模块(一)

    基础知识补充: 常用自动化运维工具 Ansible:使用python来开发的,无需设置Agentless(代理),一般管理几百台.与ssh的方式也不一样,ssh是基于c/s模式(客户端+服务器)来使用 ...

  9. 20165333 学习基础和C语言学习基础

    说实话,我并没有什么技能比90%以上的人更好,非要拿一个出来的话,篮球勉强好一点吧.最初接触篮球是小学的时候跟着哥哥看他打球,哥哥的球技在同龄人中算是好的,每次看他各种突破过人,我都觉得特别潇洒帅气, ...

随机推荐

  1. 论文笔记系列-Neural Architecture Search With Reinforcement Learning

    摘要 神经网络在多个领域都取得了不错的成绩,但是神经网络的合理设计却是比较困难的.在本篇论文中,作者使用 递归网络去省城神经网络的模型描述,并且使用 增强学习训练RNN,以使得生成得到的模型在验证集上 ...

  2. JDK7与8内存参数解析与修改

    JDK内存 jdk内存实际是jvm内存,jvm有一个运行时数据区,其实就是对这一部分的大小分配. 运行时数据区通常包括这几个部分:程序计数器(Program Counter Register).Jav ...

  3. 【tomcat】Web环境(tomcat)下新增一个访问路径(虚拟路径)

    在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:(在server.xml最好不要添加中文注释,在有些操作系统会启动失败) <Context docBase ...

  4. Spring-boot:快速搭建微框架服务

    前言: Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并 ...

  5. freeRTOS中文实用教程3--中断管理之计数信号量

    1.前言 在中断不频繁的系统中,使用二值信号量没有问题,但是中断频繁发生时,则会有中断丢失的问题. 因为中断发生时延迟任务执行,延迟任务执行的过程中,如果又来了两次中断,则只会处理第一次,第二次将会丢 ...

  6. phantomjs 中如何使用xpath

    function getNodeInfo(inputcsvPath) { var htmlnodeInfo = page.evaluate(function () { //_Ltg var XPATH ...

  7. jvm系列一、java类的加载机制

    一.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...

  8. java linux ftp问题

    java写的ftp上传类,本地测试环境可以用,阿里云服务器不可用,两者系统均为centos.经过测试,发现appche的ftpclient类不可用,换成sun的ftpclient可以使用.

  9. WebRTC服务器——Licode 环境搭建

    WebRTC服务器--Licode 环境搭建 系统配置 阿里云服务器 Ubuntu 14.04.5 LTS Docker 环境搭建 在一台空的机器上搭建docker环境,先要安装docker,执行下面 ...

  10. PHP 闭包

    一.闭包基本用法闭包(Closure)又叫做匿名函数,也就是没有定义名字的函数.比如下面的例子: // 定义一个闭包,并把它赋给变量 $f $f = function () { return 7; } ...