Go学习笔记(五)
来源:互联网 发布:软件开发质量保证措施 编辑:程序博客网 时间:2024/06/07 02:26
4.数据
4.1 Array
4.2 Slice
4.2.1 reslice
4.2.2 append
4.2.3 copy
4.3 map
4.4 struct
4.4.1 匿名字段
4.4.2 面向对象
1.通常以 2 倍容量重新分配底层数组。在大批量添加数据时,建议一次性分配足够大的空间,以减少内存分配和数据复制开销。或初始化足够长的len属性,改用索引号进行操作。及时释放不再使用的slice 对象,避免持有过期数组,造成GC 无法回收。
s := make([]int, 0, 1)c := cap(s)for i := 0; i < 50; i++ {s = append(s, i)if n := cap(s); n > c {fmt.Printf("cap: %d -> %d\n", c, n)c = n}}输出:
i= 1 , cap 1 -> 2
i= 2 , cap 2 -> 4
i= 4 , cap 4 -> 8
i= 8 , cap 8 -> 16
i= 16 , cap 16 -> 32
i= 32 , cap 32 -> 64
i= 2 , cap 2 -> 4
i= 4 , cap 4 -> 8
i= 8 , cap 8 -> 16
i= 16 , cap 16 -> 32
i= 32 , cap 32 -> 64
2.从 map 中取回的是一个value 临时复制品,对其成员的修改是没有任何意义的。
type user struct{ name string }m := map[int]user{ // 当 map 因扩张⽽重新哈希时,各键值项存储位置都会发⽣改变。 因此, map1: {"user1"}, // 被设计成 not addressable。 类似 m[1].name 这种期望透过原 value} // 指针修改成员的⾏为⾃然会被禁⽌。m[1].name = "Tom" // Error: cannot assign to m[1].name正确做法是完整替换value或使用指针
u := m[1]u.name = "Tom"m[1] = u // 替换 value。
m2 := map[int]*user{1: &user{"user1"},}m2[1].name = "Jack" // 返回的是指针复制品。透过指针修改原对象是允许的。
3.面向对象三大特征里,Go仅支持封装,尽管匿名字段的内存布局和行为类似继承。没有class关键字,没有继承、多态等。
type User struct {id intname string}type Manager struct {Usertitle string}m := Manager{User{1, "Tom"}, "Administrator"}// var u User = m // Error: cannot use m (type Manager) as type User in assignment// 没有继承,⾃然也不会有多态。var u User = m.User // 同类型拷⻉。
阅读全文
0 0
- Go学习笔记(五)
- Go语言学习笔记(五) [函数]
- Go学习笔记五(接口)
- Go语言学习笔记(五)方法
- Go语言学习笔记(五)-其他类型(指针、结构体、、)
- 五、go语言特性--go语言笔记
- 【Go学习笔记】Hello Go!
- Go语言学习笔记
- Go学习笔记
- go学习笔记
- Go语言学习笔记
- go语言学习笔记
- Go学习笔记
- Go学习笔记(2)
- Go语言学习笔记
- go学习笔记
- Go学习笔记:interface
- GO语言学习笔记
- NOIP2010第一道 ---导弹拦截(摘自洛谷题解)
- VS2013 BCGControlBar 25 遇到的问题记录
- MySQL数据库学习笔记
- [Google Guava] 6-字符串处理:分割,连接,填充
- 深入浅出LDA(1)
- Go学习笔记(五)
- Understanding LSTM Networks
- configuration.output.path: The provided value "./" is not an absolute path!
- hibernate简介
- JAVA 构建使用 Native 库
- 接下来的学习计划
- sdnu1081.2013
- python 正则表达式 (持续更新)
- 说说C++的类型转换