这是我在第六届青训营的第一篇笔记
Go 语言简介
Go 语言是 Google 公司开发的编程语言,最初是为了减少 Google C++ 项目的构建时间过长的问题。拥有原生并发支持,构建速度快,语法简单等一系列优点。
基础语法
变量
Go 语言的关键字可以通过 var 来声明,也可以通过 := 来进行短变量声明。任何变量一经声明都会自动初始化为其类型的零值。
常量
使用 const 关键字进行声明,Go 语言的常量仅存在于编译时,编译器在编译时会将其全部替换为对应的值,也就是字面量。可以视为字面量的别名。Go 语言是不允许把变量赋值给常量的,因为这在编译时无法确定。
零值
每种类型都有其对应的零值,对于 int 和 float 和 rune 类型,这个值是 0,对于字符串,这个值是空字符串,对于布尔类型,这个值是 false,指针和map则是 nil
数组和切片
数组
Go 的数组在初始化是需要指定大小 var a [3]int {1,2,3} ,也可以让编译器自动确认大小 var a [...]int{1,2,3} ,此外,数组大小是数组类型的一部分,也就是说 [3]int 和 [4]int 是两种不同的类型,也不允许在声明数组时将一个变量作为数据长度。这样很不灵活,于是有了切片,在实践中更为常用。
切片
切片在声明时与数组很类似,唯一的区别是不指定长度。例如:var a []int 就声明了一个长度和容量都为0的空切片。切片可以根据需要进行增长。
切片实际上有一个内部数组,所以切片具有容量和长度两个属性。可以分别用 len() 和 cap() 两个内置函数读取。长度是你对切片的已分配值在这个内部数组占了多少,容量则是这个内部数组的长度。因此切片的容量永远大于或等于长度。
映射
键和值的映射,可以通过键获取值,例如
var nilMap map[string]int
结构体
Go 中没有类,也没有继承,但可以通过结构体来实现类型的组合
var person struct {
name string
age int
}
循环结构,选择结构
Go 只有 for 循环一种循环结构,while 循环也可以用不带任何条件的 for 循环替代,if 语句与 C 语法类似,对于 switch,并不需要末尾的 break,相反,如果要其它语言中不加break会执行后边的所有 case 的特性,应该使用 fallthrough 关键字
函数
使用 func 关键字声明函数,函数可以具有多个返回值,返回值列表位于函数最后。
func foo(a int) int