Go的入门基础涉及到的内容还是比较多的。受篇幅限制,这里只介绍本人在这次青训营项目中用到的基础语法以及切片的一些常用特性。
变量声明
基本的变量声明,其格式为 var + 变量名 + 变量类型
var name string // 声明一个名为 name 的字符串变量
var age int // 声明一个名为 age 的整数变量
当然,直接在定义时带初始值也是可以的。
var name string = "Alice" // 声明一个字符串变量并初始化为 "Alice"
var age int = 25 // 声明一个整数变量并初始化为 25
然后就是较为简化的短变量声明,其格式为 变量名 + := + 初始值
name := "Alice" // 声明并初始化一个字符串变量
age := 25 // 声明并初始化一个整数变量
显然,短变量声明的初始值是不能忽略的。短变量声明经常用于接收方法的返回值。
我们也可以在一行代码中同时声明多个变量,其格式为 var + 变量名A,变量名B,... + 变量类型,声明的这些变量都得是同个类型的,且可以像单变量一样在声明时赋初始化值,中间同样用 , 隔开即可。
var name, country string = "Alice", "USA" // 声明多个字符串变量并初始化
var x, y int = 10, 20 // 声明多个整数变量并初始化
还有常量的变量声明,其格式为 const + 变量名 + 初始化值
const pi = 3.14159 // 声明一个常量 pi
但这里需要注意,常量的变量声明不能加变量类型的,系统会自动判定常量的类型。
数组和切片
这里就不介绍别的一般数据类型了,比如int,string,float,bool这些,使用起来和其他语言差别不大,所以直接选择介绍Go中比较特殊的数组(Array)和切片(Slice)。
数组
这里定义一个数组a,int类型,长度为6
a := [6]int{0,1,2,3,4,5} //初始化赋值
var a [6]int //不赋值
数组在定义完之后的长度是固定的,也就是说如果想要定义一个数组,[ ]中必须要声明数组的长度。如果不写,
a := []int
那就会创建一个空切片,此时切片中的长度和容量都是0。后面将会介绍什么是切片的长度和容量。
切片
这里有几种比较常见的切片声明方式。
a := []int{0, 1, 2, 3, 4, 5} // 声明并初始化一个切片
arr := [5]int{1, 2, 3, 4, 5} // 声明一个数组
slice := arr[1:4] // 从数组中创建一个切片
a := make([]int, 5) // 创建长度为5的切片,初始值为0
b := make([]int, 0, 10) // 创建长度为0,容量为10的切片
a := []int{} // 声明一个空切片
a = append(a, 1) // 向切片添加元素
a = append(a, 2, 3) // 向切片添加多个元素
除了直接用 []变量类型{} 的格式声明切片以外,我们还可以利用数组来创建一个切片,如3,4行代码所示。当然,我们还可以采用make()方法来声明切片,make有三个参数,一个参数用于定义要创建的切片所包含数据的变量类型,格式为 []变量类型,剩下的两个参数分别为长度(length)和容量(capacity),可以选择只定义长度,会自动分配合理的内存,也可以选择两者都定义,但要保证容量大于等于长度。其中,长度表示当前切片所包含的元素的个数,容量则表示切片所能存储的元素个数的上限。在最后一种切片的声明方式中我们可以看到,可以通过append函数来向切片中增加元素。当元素的个数超过切片的容量时,切片会自动扩容。由此可见,相比于数组,切片可以根据需求动态改变长度和容量,更加灵活,便于操作,且容量的存在使得切片能更好地控制占用内存的大小。