Go语言学习 基本类型 Bool 取值范围:true,false (不可以用数字代替) Int/uint 根据平台可能为32或64位 int8/uint8 长度:1字节 取值范围-128~127/0~255 byte(uint8别名) int16/uint16 int32/uint32 int62/uint64 float32/float64 长度:4/8字节 小数位:精确到7/15小数位 复数:complex64/complex128 长度:8/16字节 足够保存指针的32位或64位整数型 零值是变量的默认值
在submit里面ctrl+b是打开我们的测试窗口,go run 是运行程序
Go语言中只能显示转换<valueA> [:]=<TypeOfValueA>(<ValueB>) 浮点型和布尔型不能进行转换 string转换为int类型 var valueA, _ = strconv.Atoi(ValueB) Int类型转换为string类型 valueA:= strconv.Itoa(ValueB)
- #string到int
- int,err:=strconv.Atoi(string)
- #string到int64
- int64, err := strconv.ParseInt(string, 10, 64)
- #int到string
- string:=strconv.Itoa(int)
- #int64到string
- string:=strconv.FormatInt(int64,10)
Go中有指针 采用”.”选择符来操作指针目标对象的成员 操作符”&”取变量地址,使用”*”通过指针间接访问目标对象 默认值为nil不是null
If语句中大括号必须跟在条件语句后面,条件语句可以没有括号,可以在条件语句中可以声明变量
For语句 for{} 无限循环 for i:=0;i<3;i++ {} 经典模式
Switch 支持任何类型或表达式的条件语句,不需要break,符合条件自动跳出,如需要继续执行下一个case,需要使用fallthrough语句,支持初始化表达式,右侧需跟分号,做大括号必须和条件语句在同一行。
Goto break和continue会与标签结合使用,否则break只会跳出本次循环
数组 var a [2]int //长度为2的int型数组 没有赋值,则默认的值为零;string默认为空 a :=[2]int{1} //数组的第一个数为1,第二个为默认0 a :=[20]int{19:1} //添加索引,第二十个元素为0,其他为0 a :=[…]int{1,2,3,4,5} //长度为5的数组 a :=[…]int{19:1} //索引20元素为1,其他为零,数组长度为20
数组指针 a := […]int{19:1} Var p *[100]int= &a //p位数组a的地址 指针数组 x,y=1,2 a:=[…]int{&x,&y} //a输出的是x,y的地址 数组之间可以进行==和!=的比较
切片Slice 本身不是数组,它指向底层的数组 可以直接创建或从底层数组获取生成 len()获取元素个数,cap()获取容量,make()创建,如果多个slice指向相同底层数组,其中一个的值改变会影响全部 make([]T,len,cap) 如果cap省略,则和len的值相同
var a=[]int //切片的定义
a:=[10]int s1:=a[5:] //切片s1取数组a索引5到最后的元素 s1:=a[:5]//s1取数组a索引0到5的元素 s1:=a[3:9] //s1取数组a索引3到9的元素
s1 :=make([]int,3,6) //定义s1切片,长度为3,容量为6 s1=append(s1,1,2,3) //利用append函数为切片s1追加元素1.2.3
map var m map[int]string //map定义 m=make(map[intstring]) //初始化 m[1]=”ok” //赋值 a :=m[1] //取值 delete(m,1) //删除值
多重map嵌套,需要第二层的进行初始化 var m map[int]map[int]string m=make(map[int]map[int]string) m[1]=make(map[int]string) //对于key为1 进行初始化 m[1][1]=”ok” a:=m[]
range 迭代函数 sort.Ints(s) 排序
对map的间接排序 m :=map[int]string{1:”a”,2:”b”,3:”c”,4:”d”,5:”e”} //建map s:=make([]int,len(m))//建slice i:=0 for k,_:=range m{ //迭代取出每一个key的值,存到slice中 s[i]=k i++ } Sort.Ints(s) //对slice排序
Go 函数 不支持 嵌套、重载和默认参数 无需声明原型、不定长度变参、多返回值、命名返回值参数 匿名函数、闭包 defer 在函数体执行结束后 按照调用顺序的相反顺序逐个执行 即使函数发生严重错误也会执行 支持匿名函数的调用 常用于资源清理、文件关闭、解锁以及记录时间等操作 通过与匿名函数配合可在return之后修改函数计算结果 如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer 时即已经获得了拷贝,否则则是引用某个变量的地址 Go 没有异常机制,但有 panic/recover 模式来处理错误 Panic 可以在任何地方引发,但recover只有在defer调用的函数中有效
结构体 Go 中的struct与C中的struct非常相似,并且Go没有class 使用 type <Name> struct{} 定义结构,名称遵循可见性规则 支持指向自身的指针类型成员 支持匿名结构,可用作成员或定义成员变量 匿名结构也可以用于map的值 可以使用字面值对结构进行初始化 允许直接通过指针来读写结构成员 相同类型的成员可进行直接拷贝赋值 支持 == 与 !=比较运算符,但不支持 > 或 < 支持匿名字段,本质上是定义了以某个类型名为名称的字段 嵌入结构作为匿名字段看起来像继承,但不是继承 可以使用匿名字段指针
|
请发表评论