擅自使用了七牛大牛们的PPT资料,希望不要怪罪,这里谢谢大牛们的分享。
映射 map 一个”键-值”对 关键点:注意并发读写情况,上锁 不能对未初始化的 map 进行写,会抛异常(panic) 对于迭代 *** 作,每次结果可能不一致(乱序)var m map[string]intm["k1"] = 7 // 错误: assignment to entry in nil mapm := make(map[string]int) // 初始化成一个空 map: [],可以进行读写m["k1"] = 7m["k2"] = 13delete(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 是指向底层数据结构的引用,使用前必须被初始化
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 Bb.S.a = "a" // 给匿名字段 S 赋值b.a = "a" // 同上fmt.Println(b)// 输出结果: {{a } }不是{a}type String stringb.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 Bb.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 Bb.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总结
以上是内存溢出为你收集整理的四、golang类型讲解--go语言学习笔记全部内容,希望文章能够帮你解决四、golang类型讲解--go语言学习笔记所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)