程序结构
命名
字母/下划线开头,如ABC,abc,_abc; case sensitive
声明
四种类型声明语句:var, const,type和func
package main
import "fmt"
func main(){
var a = 3
var b = 5
fmt.Printf("Hello World!\n"); // go 语言中封装函数需要大写首字母
}
变量
var 变量名 类型 = 表达式
var id int = 123
id := 123 // 简略写法
其中“类型”或“= 表达式”两个部分可以省略其中的一个;
如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。
如果初始化表达式被省略,那么将用零值初始化该变量。
数值类型变量对应的零值是0
布尔类型变量对应的零值是false
字符串类型对应的零值是空字符串
接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil
数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值
nullptr 为 nil, 任何空指针都为nil
var s string
fmt.Printf(s) // ""
name := "abc" // 简短声明来赋值变量 := 是声明变量并赋值
在Go语言中,返回函数中局部变量的地址也是安全的!c++中无法实现
元组赋值
可以很方便的交换两个元素的值:
var a []int
a[i], a[j] = a[j], a[i]
元组赋值也可以使一系列琐碎赋值更加紧凑
i, j, k = 1, 2, 3
f, err = os.Open("path") // 元组接取函数多个返回值
通常,这类函数会用额外的返回值来表达某种错误类型,例如os.Open是用额外的返回值返回一个error类型的错误,还有一些是用来返回布尔值,通常被称为ok
v, ok = map[key]
v = x.(T) // type assertion
_, ok = x.(T) // 和变量声明一样,我们可以用下划线空白标识符`_`来丢弃不需要的值
错误处理
不同于java使用的异常,go使用一个单独的返回值来传递错误信息
包和文件
在Go语言中,一个简单的规则是:如果一个名字是大写字母开头的,那么该名字是导出的