跟我学习Go语言(3)
内存分配
new
new(T)返回一个T的指针 指向一个零值T
make
make(T, args) 与new(T) 有着不同的功能。它只能创建slice,map和channel,并且返回一个有初始值(非零)的T 类型,而不是*T(返回的是引用,不是指针)。已完成初始化!
复合声明
复合声明&File{fd: fd, name: name} 从堆中分配。‘&’得到堆上分配到的内存地址。
type
用法:
type foo int
使foo与int一样 与c/c++中typedef一样(foo与int位置相反)
结构体(struct)
注意:方法和成员变量命名以大小写确定是否可以导出(即大写开头为public 小写开头为pravite
用法
1 | type NameAge struct { //可以有匿名字段 |
定义方法
1 | func (n1 *NameAge) func1(n2 int ) { /* */ } |
func1是&NameAge上的方法,可以修改NameAge成员变量的值
func2是NameAge上的方法,不可以修改NameAge成员变量的值
Go语言里为了贯彻方便开发的原则,内部实现NameAge.func1(int)等价于(&NameAge).func1(2)
注意:x.m()等价于(&x).m()
转换
From | b []byte | i []int | r []rune | s string | f float32 | i int |
---|---|---|---|---|---|---|
To | ||||||
[]byte | []byte(s) | |||||
[]int | []int(s) | |||||
[]rune | []rune(s) | |||||
string | string(b) | string(i) | string(r) | |||
int | float32(i) | |||||
float32 | int(f) |
string(97)得到结果为“a”,如果是想将97转换成“97”,就要使用strconv包里的Itoa方法。strconv.Itoa(97)。另外strconv包里还有其他的转换方法,下篇会有介绍。