这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
Go
应用程序入口要求
1.必须是main包 : package main
2.必须是main方法: func main()
3.文件名可以自定义
4.main函数不支持任何返回值
5.通过os.Exit来返回状态
6.main方法不可以直接接收命令行参数,可以通过os.Args来获取参数
常用赋值方式
//主要用于不知初始值时,进行全局变量的定义
var a int = 1
var b int = 1
//自动识别类型进行初始化和赋值
i := 1
常用测试方法
package Test
import "testing"
func TestFibList(t *testing.T) {
var a int = 1
var b int = 1
t.Log(a)
for i := 0; i < 5; i++ {
t.Log(b)
temp := a
a = b
b = temp + a
}
}
//文件命名为xxx_test.go
//主函数名以Test开头
数组
在c语言中我们知道数组名在本质上是数组中第一个元素的地址,而在go语言中,数组名仅仅表示整个数组,是一个完整的值,一个数组变量即是表示整个数组。
所以在go中一个数组变量被赋值或者被传递的时候实际上就会复制整个数组。如果数组比较大的话,这种复制往往会占有很大的开销。所以为了避免这种开销,往往需要传递一个指向数组的指针,这个数组指针并不是数组。
声明
var a[3]int //声明并初始化默认值为0
b :=[3]int{1,2,3}
c :=[2][2]int{{1,2},{3,4}}
遍历
func TestArray(t *testing.T) {
a := [5]int{1, 2, 3, 4, 5}
//索引遍历
for i := 0; i < len(a); i++ {
t.Log(a[i])
}
//range遍历
for index, e := range a {
t.Log(index, e)
}
//当不想使用索引时
for _, e := range a {
t.Log(e)
}
}
切片截取
a[开始索引(包含),结束索引(不包含)]
切片和原数组公用同一存储空间,任一元素改变都会影响原始数组
不能进行比较
Map
初始化
m1 := map[string]int{"one": 1, "tow": 2, "three": 3}
m2 := map[string]int{}
m2["one"] = 1
m3 := make(map[string]int, 10)
t.Log(m1["one"])
t.Log(m2["one"])
t.Log(len(m3))
函数
差异
1.可以有多个返回值
2.所有参数都是值传递
3.函数可以作为变量的值
4.函数可以作为参数和返回值
与其他语言的区别
1.不支持强制类型转换
2.不支持指针运算
3.string是值类型,默认的初始化为空字符串,并不是nil
4.for循环条件不用括号