go语言语法基础 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
格式规范
- 声明变量/函数时类型后置
- 打括号不能单独一行
- 一行表示一句结束,可以不加分号
- 吃掉(),if、for后面的条件不用括号括起
- 通过变量名首字母的大写写区分访问权限,大写外包可引用,小写本包可用
import ""/{"",""}
import "fmt"import {"fmt","math"}`
变量的声明及定义
-
go变量声明时数据类型是后置的或是能由后面的推出
var hello stringvar hello = "hello world!"hello := "hello world"
-
数组的长度是确定的或是能推出的
var arr [8]intvar arr = [...]int{1,2}arr := [...]int{1,2}
-
结构体类似数组
arr := typename{memberValue1,,}
-
map类似,但直接声明得到的是空nil
var mp map[int]int //nilmp = make(map[int]int) //make构造map
-
切片声明和数组类似,但
[]内不写长度var slc []int //但只声明,无实例slc- make([]int,len,cap)
-
函数声明同样后置类型
func name(a int,b,string) int {} -
结构体声明同样后置类型
type name struct {n1 type1,n2 type2,,,} -
有类似py的多重赋值
k,v := {,}
循环与cpp和py的相似与不同
- go用for实现了cpp的for和while
for init;conditon;post {}for conditon {}for {}
- go用for和内置操作range实现py的
for i in arrfor ind:val := arr {}//可遍历数组,map,切片,通道等
结构体
- 无论是一般变量还是指针变量,都是通过
.访问成员 - go没有类的层次,但是可以通过结构体接受函数构成成员函数
func (t structName) (){}func (t *structName) (){} //可修改结构体里的值
- 初始化成员变量时按先后赋值,也可以按变量名赋值
a1 := name{e1,e2,,,}a2 := name{nmbName1:e1,nmbName3:e2}
函数
-
可返回多个值
func name() {type1,type2} {} -
可作匿名函数进行值传递
f := func(){}`
-
匿名函数作闭包
其他
- map的使用与cpp类似,但要用make创建实例
- 切片的使用与py的数组类似,但要用make创建实例
slc = append(alc,e)//append超过容量时会新建一个切片