go语言学习总结
go语言学习总结:
1.关键字
break | default | func | interface | select |
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
2.预留标识符
append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new | nil | panic | uint64 |
println | real | recover | string | true | uint | uint8 | uintptr |
3.派生类型
讲解链接:https://blog.csdn.net/travelerl/article/details/102558666
4.sizeof():
C中的sizeof("String"),返回字符串在内存中的占用空间;
go中的unsafe.sizeof(),{golang中的sring内部实现由两部分组成,一部分是指向字符串起始地址的指针,另一部分是字符串的长度,两部分各是8字节,所以一共16字节}
因为对Go的内存处理机制,所以对于sizeof的使用,暂时先放一放
5.iota:iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
6.go可以自加自减:但是不能 b:=a++
7.go拥有短路逻辑
8.运算符优先级:&a:内存地址(*a:定义指针变量) ;0&^0:异或运算
优先级 | 运算符 |
---|---|
5 | * / % << >> & &^ |
4 | + - | ^ |
3 | == != < <= > >= |
2 | && |
1 | || |
9.Go语言select语句:随机的Swtich语句,随机运行case,有可执行case责运行,无则阻塞直到有可执行的case,再运行。
select 会循环检测条件,如果有满足则执行并退出,否则一直循环检测。
10.定义函数,如果输入参数必须指定类型;如果一个输入参数找不到类型,就会往后找:
对:a,b int,c string ,a,b,c int;错:a,b int,c ;
func function_name( [parameter list] ) [return_types] {
函数体
}
11.函数使用值传递,修改函数内的输入参数,其main()里无影响;
如果使用引用传递,那么参数需要传入内存地址,即把”指针“当做一个值来传递。
12.go支持交叉复制:x,y=y,x
13.go不支持三目运算符:go的思想"一种事情有且只有一种方法完成”
14.Go语言闭包函数:
(函数里面套函数)
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
15.go语言函数和方法
对于普通函数:接收者(函数参数)为值类型时,不能将指针类型的数据直接传递,反之亦然。
func function_name([parameter list]) [return_types] {
函数体
}
对于方法(如struct方法): 接收者为值类型时,可以直接用指针类型的变量调用方法,反之亦然。
func (variable_name variable_data_type) function_name() [return_type]{
/* 函数体*/
}
Go 语言中同时有函数和方法。一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。
因为GO语言没有面向对象,所以使用方法?
16.go语言”作用域“
定义的常量、变量、类型、接口、结构、函数等的名称是大写字母开头表示能被其它包访问或调用(相当于public),非大写开头就只能在包内
使用(相当于private,变量或常量也可以下划线开头)
17.针变量通常缩写为 ptr,空指针的值为nil
18.在main()外的函数和方法,无法获得内存地址,因为内存地址动态生成?
我在尝试创建一个数组,并将函数放进数组内;也可能是我调用的方法不对,之后再做尝试。
或者应该尝试用结构体?
19.数组Book,添加了book,修改book的值,Book里的book值不会被修改(append应该是复制内存)