四、golang类型讲解--go语言学习笔记
发布时间:2020-12-16 18:32:45 所属栏目:大数据 来源:网络整理
导读:擅自使用了七牛大牛们的PPT资料,希望不要怪罪,这里谢谢大牛们的分享。 映射 map 一个”键-值”对 关键点:注意并发读写情况,上锁 不能对未初始化的 map 进行写,会抛异常(panic) 对于迭代操作,每次结果可能不一致(乱序) var m map [ string ] int m[
擅自使用了七牛大牛们的PPT资料,希望不要怪罪,这里谢谢大牛们的分享。 映射 map
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 指针
创建自己定义的类型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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |