大家好,今天给各位分享golang基本结构的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
2.结构体定义和初始化
1.结构体定义
类型struct_variable_type struct {
field1 字段类型
field2 字段类型
……
fieldn 字段类型
}
2.结构体初始化
1.通过new(Struct_Name)函数初始化
2、直接使用struct{}初始化strut时,返回struct类型的值。
3. 结构体成员访问控制
定义结构体成员时,区分大小写。如果第一个字母大写,则该成员为公共成员(对外界可见),否则为私有成员(对外界不可见)。
4. 结构体的匿名成员
1、struct结构中,并不是每个成员都需要有名字。没有名字的人可以成为匿名会员。匿名成员的一个重要作用可以用来在oop中实现继承。
2. 同一类型的匿名成员只能存在一个。
3. 当匿名成员是结构体并且两个结构体中存在相同字段时,首先选择最接近的字段。
包主
导入“fmt”
类型Person 结构{
名称字符串
年龄整数
}
类型学生结构{
分数字符串
年龄整数
人
}
函数主() {
var Stu=新(学生)
Stu.Age=22 //选择学生年龄
fmt.Println(stu.Person.Age,stu.Age) //0,22
}
5. 结构体标签
1.结构体标签函数
类型用户结构体{
Id int `json:’id’`
名称字符串`json:’name’`
Admin bool `json:’-‘` //- 表示不转换,跳过该字段
CreatedAt time.Time `json:’created_at’`
}
3.获取struct tag(通过反射获取)
t :=反射.TypeOf(u)
字段:=t.Elem().Field(0)
fmt.Println(field.Tag.Get(‘json’))
6. 结构体继承和多重继承
1、如果一个结构体嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的方法,从而实现继承。
2. 如果一个结构体嵌套另一个[命名]结构体,那么这种模式称为组合
3、如果一个struct嵌套了多个匿名结构,那么这个结构可以直接访问多个匿名结构的方法,从而实现多重继承。
4.“。”还用于访问父结构中的属性。但是,当子结构中存在与父结构中相同的字段时,只能使用:’Substruct.父结构。 Fields’ 用于访问父结构中的字段。财产
5. 如果子结构和父结构有同名的变量或函数,不会发生覆盖。可以通过“父结构体名.变量或函数名”调用父结构体同名的变量或函数。
7. 结构体方法
1.方法和函数的区别
方法和函数之间的区别在于方法有接收者。如果你给一个函数添加一个接收者,它就变成了一个方法。接收器可以是值接收器或指针接收器。
2.方法定义
func (recv 类型) methodName(parameter_list) (return_value_list) { … }
3.struct方法的值接收者和指针接收者
(1) 实现接收者为值类型的方法相当于自动实现接收者为指针类型的方法;实现接收者为指针类型的方法不会自动生成相应的接收者为值类型的方法。
(2)如果接收者是指针类型方法,很可能会在方法中改变接收者的属性,从而影响接收者;而对于接收者是值类型的方法,接收者本身不会在方法中被修改。产生影响。
(3)如果方法的接收者是值类型,无论调用者是对象还是对象指针,修改的都是对象的副本,不会影响调用者;如果方法的接收者是指针类型,则调用者会修改指针。尖头物体本身。
(4)指针类型接收者的适用场景:
a) 该方法可以修改接收者指向的值。
(5)示例
包主
导入“fmt”
类型戈珀接口{
打印()
}
类型Goper1 结构体{
名称字符串
}
类型Goper2 结构体{
名称字符串
}
func (self *Goper1) printf() {
fmt.Println(self.name)
}
func (self *Goper2) printf() {
fmt.Println(self.name)
}
函数主() {
变种g1 Goper1
g1=Goper1{“go1”}
g1.printf()
变种g2 Goper2
g2=Goper2{“go2”}
g2.printf()
}
//上面直接编译会报错,因为违反了上面第一点,实现了接收者为指针类型的方法,并不会自动生成值类型接收者对应的方法。此时,调用g1和g2都是值类型。
正确的调用方法:
函数主() {
变种g1 Goper1
g1=Goper1{“go1”}
g1.printf()
变种g2 Goper2
g2=Goper2{“go2”}
g2.printf()
}
8. 结构toString
该struct实现了String方法,当fmt打印格式%s时可以自动调用该方法。
9. 结构体内存布局
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/126565.html
用户评论
将妓就计
终于找到一篇讲清楚 Golang struct 的文章了!之前总是懵懵懂懂,看这篇文章像打开了新的世界大门,感觉掌握了Go语言的基础逻辑。
有6位网友表示赞同!
灬一抹丶苍白
写得真好,简洁明了,用图解的方式讲解,很容易理解。现在开始学习Go编程,这篇入门指南真是太棒了
有8位网友表示赞同!
坏小子不坏
这个 struct 的学习笔记真的超详细,包含了很多实际案例分析,对于初学者来说简直是宝藏啊!以后遇到类似问题就直接查阅这篇文章就OK了 。
有7位网友表示赞同!
栀蓝
我觉得 Golang 的定义方式和 C/C++ 还是有点不一样的,这篇教程讲解得透彻,让我对 struct 有更深的理解
有20位网友表示赞同!
゛指尖的阳光丶
这篇基础入门指南比较适合刚接触 Go语言的朋友,结构清晰逻辑严谨,就是希望作者能多添加一些进阶知识的讲解,比如 struct 的指针与引用操作等等。
有7位网友表示赞同!
旧事酒浓
虽然写得不错,但是代码例子还是少一些,希望能提供更多实际项目中的应用场景。
有18位网友表示赞同!
夜晟洛
这篇博客文章让我对Golang基础结构非常清楚,而且图解很直观易懂!对于一个语言新手来说简直太棒了!
有8位网友表示赞同!
凉话刺骨
structs 在 Go 语言中确实非常重要啊!这篇文章讲解得很到位,尤其是对访问 struct 成员的说明,很有帮助。
有14位网友表示赞同!
寻鱼水之欢
学习了这篇博客文章之后,终于明白了 Golang struct 的定义和运用方式。 对于これから深入学习 Go 的小伙伴来说很推荐 这篇博文!
有14位网友表示赞同!
陌然淺笑
虽然入门知识讲到挺清楚,但是希望作者能够在后续的文章中继续深入讲解一些更复杂的结构设计和使用技巧。
有19位网友表示赞同!
隔壁阿不都
这篇文章写的真的很好! 一下子就明白了 Golang中的 struct 到底是什么!之前总是觉得代码里那些 `struct` 是个黑盒子…
有6位网友表示赞同!
冷风谷离殇
这个 struct 的定义方式确实比 C/C++ 好理解许多,Go语言的设计很巧妙!这篇博客文章讲解的很清晰。
有17位网友表示赞同!
爱你的小笨蛋
structs 真的是 Go 语言的基础之本啊! 学习了这篇文章之后感觉对 Golang 有了一个更系统的认识
有17位网友表示赞同!
青楼买醉
文章写的详细而且容易理解。对Golang的 struct 有一个很好的入门指南。
有14位网友表示赞同!
满心狼藉
希望以后作者能多写一些关于 struct 的应用案例,比如如何设计复杂的结构体等,这样对学习者更加有帮助!
有15位网友表示赞同!
七夏i
这篇博客文章讲解了 Golang 的 struct 的基础知识点 , 但是对于初学者来说,可能会觉得缺乏实际的代码例子和场景应用。
有10位网友表示赞同!
暖栀
希望能更详细地介绍 struct 定义中的一些特殊语法以及常见错误如何避免,这样能帮助我更快更好地理解
有11位网友表示赞同!
服从
学习Golang, 这篇文章太适合我了! 让我对 Golang 中的 `struct` 有了初步的了解。感谢作者分享!
有11位网友表示赞同!
岁岁年年
对比其他语言, Golang 中 structs 的实现方式确实更加简洁优雅! 这篇博文很好的展示了这一点
有20位网友表示赞同!