Go笔记2:基础语法
变量
说明:
使用var关键字是Go最基本的定义变量方式,Go把变量类型放在变量名后面;
_(下划线)是个特殊的变量名,任何赋予它的值都会被丢弃;
1
_, b := 34, 35 //将值35赋予b,并同时丢弃34
Go对于已声明但未使用的变量会在编译阶段报错;
1
2
3
4
5
6var variableName type //定义一个名称为“variableName”,类型为"type"的变量
var vname1, vname2, vname3 type //定义三个类型都是“type”的三个变量
var variableName type = value //初始化“variableName”的变量为“value”值,类型是“type”
var vname1, vname2, vname3 type= v1, v2, v3 //定义三个类型都是"type"的三个变量,并且它们分别初始化相应的值
var vname1, vname2, vname3 = v1, v2, v3 // 定义三个变量,它们分别初始化相应的值,Go会根据其相应值的类型来初始化它们
vname1, vname2, vname3 := v1, v2, v3 //**:=**这个符号直接取代了var和type,这种形式叫做简短声明,只能用在函数内部;在函数外部使用var方式来定义全局变量
常量
说明:
- 在Go程序中,常量可定义为数值、布尔值或字符串等类型;
1 | const constantName = value |
基础类型
- 布尔型:类型为bool,值是true或false,默认为false;
- 数值类型:
- 整数类型: 有无符号和带符号两种 - int和uint,这两种类型的长度相同;
- 浮点类型: 有float32和float64两种(没有float类型),默认是float64;
- 复数: 它的默认类型是complex128(64位实数+64位虚数),也有complex64(32位实数+32位虚数) ;
- 字符串: 类型是string, 是用一对双引号(””)或反引号(
- Go中字符串是不可变的;
- 可以将字符串转换为 []byte 类型数组,修改后在转换回 []string 数组,例如下面的例子:
1 | s := "hello" |
- Go中使用+操作符来连接两个字符串;
- 使用反引号(
- 错误类型:内置有一个error类型,专门用来处理错误信息,Go的package里面还专门有一个包errors来处理错误:
1
2
3
4err := errors.New("emit macho dwarf: elf header corrupted")
if err != nil {
fmt.Print(err)
}
分组声明
同时声明多个常量、变量,或者导入多个包时,可采用分组的方式进行声明:
1 | import( |
iota枚举
关键字iota用来声明enum的时候采用,它默认开始值是0,每调用一次加1:
1 | const( |
说明:
- 数组不能改变长度;
- 数组之间的赋值是值的赋值,即当把一个数组作为参数传入函数的时候,传入的其实是该数组的副本,而不是它的指针;
slice
slice是一个引用类型, slice总是指向一个底层array,slice的声明也可以像array一样,只是不需要长度:
1 | var fslice []int //和声明array一样,只是少了长度 |
说明:声明数组时,方括号内写明了数组的长度或使用…自动计算长度,而声明slice时,方括号内没有任何字符。
map
map的格式为
map[keyType]valueType
说明:
- map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取
- map的长度是不固定的,也就是和slice一样,也是一种引用类型
- 内置的len函数同样适用于map,返回map拥有的key的数量
- map的值可以很方便的修改,通过numbers[“one”]=11可以很容易的把key为one的字典值改为11
- map和其他基本型别不同,它不是thread-safe,在多个go-routine存取时,必须使用mutex lock机制
- map的初始化可以通过key:val的方式初始化值
- map有两个返回值,第二个返回值,如果不存在key,那么ok为false,如果存在ok为true
- 通过函数**delete(array,key)**删除map的元素
make 和 new操作
new
new(T)分配了零值填充的T类型的内存空间,并且返回其地址:
new返回指针
make
make(T, args)只能创建slice、map和channel,并且返回一个有初始值(非零)的T类型,而不是*T:
make返回初始化后的(非零)值
参考资料
- 标题: Go笔记2:基础语法
- 作者: zjun
- 创建于 : 2013-10-27 21:06:19
- 更新于 : 2023-11-30 15:31:59
- 链接: https://zjun.site/2013/10/369b270da178.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论