四、golang类型讲解--go语言学习笔记
2016-04-05 13:34
666 查看
擅自使用了七牛大牛们的PPT资料,希望不要怪罪,这里谢谢大牛们的分享。
关键点:注意并发读写情况,上锁
不能对未初始化的 map 进行写,会抛异常(panic)
对于迭代操作,每次结果可能不一致(乱序)
make() 内建方法只能用于创建 slice, map 和 channel
slice, map, channel 是指向底层数据结构的引用,使用前必须被初始化
Go 指针只是一种引用。
取址操作符 & 获取变量存放地址,可以赋给一个指针。
映射 map
一个”键-值”对关键点:注意并发读写情况,上锁
不能对未初始化的 map 进行写,会抛异常(panic)
对于迭代操作,每次结果可能不一致(乱序)
var m map[string]int m["k1"] = 7 // 错误: assignment to entry in nil map m := make(map[string]int) // 初始化成一个空 map: [], 可以进行读写 m["k1"] = 7 m["k2"] = 13 delete(m, "k2") // 删除 "k2" 对应的值 v, ok := m["k2"] // 检查 "k2" 对应的值是否存在 fmt.Println(m["k3"]) // 不存在的 key 默认返回空值 for k, v := range m { // 迭代的结果每次可能不一致 fmt.Println(k, v) }
make() 内建方法只能用于创建 slice, map 和 channel
slice, map, channel 是指向底层数据结构的引用,使用前必须被初始化
指针
Go 有指针,但是没有指针运算。你不能 用指针变量遍历字符串的各个字节。Go 指针只是一种引用。
取址操作符 & 获取变量存放地址,可以赋给一个指针。
创建自己定义的类型
type Person struc { Name string Age int parent string } p := new(Person) p.Name = "Lishi" // 首字母大写字段,可导出,可在其它包中进行读写 p.Age = "28" p.parent = "He" // 首字母小写字段,不可导出,不可在其它包中进行读写
方法定义
func (p *Person) Study(lang string) { fmt.Println("Study some language...", lang) } p.Study("Golang")
匿名字段
type S struct { a string b string } type B struct { S // 匿名字段,只有类型 S, 字段名是 S b int // 字段名是 b int // 匿名字段,只有类型 int, 无意义 } var b B b.S.a = "a" // 给匿名字段 S 赋值 b.a = "a" // 同上 fmt.Println(b) // 输出结果: {{a } } 不是{a} type String string b.S.b = "b" // 给匿名字段 S 赋值 b.b = 10 // 名字冲突,不同上,不能这样给匿名字段中的相同字段赋值
方法继承
type S struct { a, b string } type B struct { S } func (s *S) String() { fmt.Println("In A: ", s.a, s.b) } var b B b.a = "a" b.b = "b" b.S.String() b.String() // 等价于 b.S.String()
方法覆盖
给类型 B 添加一个方法覆盖类型 S 中的 String()type S struct { a, b string } type B struct { S } func (s *S) String() { fmt.Println("In A: ", s.a, s.b) } func (b *B) String() { fmt.Println("In B: ", b.a, b.b) } var b B b.a = "a" b.b = "b" b.S.String() b.String() // 不等价于 b.S.String()
字节对齐
type B struct { a byte b string c byte } unsafe.Sizeof(B) => 32
对比一下
type A struct { a string b byte c byte } unsafe.Sizeof(A) => 24
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android上改变listView的选中颜色
- String.intern
- 你应该学习哪种编程语言?
- Go 语言 Channel 实现原理精要
- Go语言将支持Android
- [转]我们需要一种其他人能使用的编程语言
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- C#中struct和class的区别详解
- PostgreSQL ERROR: invalid escape string 解决办法
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- C#语言主要特性总结
- C语言中static的作用及C语言中使用静态函数有何好处
- 浅谈C++中的string 类型占几个字节
- 标准C++类string的Copy-On-Write技术