前言
创新互联建站是一家集网站建设,武邑企业网站建设,武邑品牌网站建设,网站定制,武邑网站建设报价,网络营销,网络优化,武邑网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
Hey,大家好呀,我是星期八,上文讲述了引入了一些结构体的知识。
但是我们知道Go是通过结构体模仿对象的,一起来看看吧。
引言
在Go中,我们是没有类这个概念的,但是我们有结构体呀~
Go中的结构体,就相当于其他语言的类,基本能实现和其他语言一摸一样的操作。
构造函数
构造函数,跟其他语言一样了,官方理解就是在类实例化时执行的方法,通常用于赋值操作。
但是在Go中,可能不是太一样,需要独立用到一个函数完成。
结构体
- type Student struct {
- Name string
- Age int
- phone string
- }
构造函数
- func NewStudent(name string, age int, phone string) *Student {
- return &Student{Name: name, Age: age, phone: phone}
- }
- //函数尽量采用固定格式 New结构体名
赋值操作
- func main() {
- var s1 = NewStudent("张三", 18, "1111")
- fmt.Println(s1)
- }
执行结果
为什么构造函数返回的时结构体指针
通常来说两个原因,第一个原因时传地址性能更高,第二个原因是因为规范,后面的函数绑定结构体也是,更多的是一个规范。
不太用纠结说指针怎么怎么看不懂,对于结构体来说,是不是指针,其实用法都一样。
函数绑定结构体
如果你有其他语言的基础,你可能对于类和对象比较熟悉,传统做法中,是将方法写入类中的。
但是在Go中,采用绑定的方式添加方法。
语法
- func (一般用this 要绑定的结构体) 函数名([参数1,参数2...]) [(返回值1,返回值2,...)]{
- 代码
- }
- //一般用this,也可以用其他的,this就像形参一样,随便换,用self,用p,用s,都一样的
示例:给Student结构体绑定方法。
- func (this Student) say() {
- fmt.Printf("我是%v,我今年%v岁了,我的手机号是%v\n", this.Name, this.Age, this.phone)
- }
main代码
- func main() {
- //调用构造方法
- var s1 = NewStudent("张三", 18, "1111")
- //调用Student绑定的say方法
- s1.say()
- }
执行结果
有没有感觉有点Java和Python的感觉了,上述可是通过结构体的方式调用方法的,这里就和C区分开了。
在Go中,基本就是通过这些操作,模拟出来面向对象的,相比之下,我更习惯Go的方式,更加灵活。
函数绑定结构体(指针方式)
如果说区别,只是将要修改的 要绑定的结构体 前面加一个*。
代码
- func (this *Student) say() {
- fmt.Printf("我是%v,我今年%v岁了,我的手机号是%v\n", this.Name, this.Age, this.phone)
- }
执行结果和上述一摸一样。
函数绑定结构体(指针方式和普通方式区别)
通常来说,一般使用指针的方式居多。
嗯...不是居多,是基本都是。
区别
代码一
- func (this Student) say1() {
- fmt.Printf("我是%v,我今年%v岁了,我的手机号是%v\n", this.Name, this.Age, this.phone)
- this.Name = "666"//这里修改了Name为其他值
- }
第3行修改了Name
- func main() {
- //调用构造方法
- var s1 = NewStudent("张三", 18, "1111")
- //调用Student绑定的say方法
- s1.say1()
- //打印s1.Name
- fmt.Println(s1.Name)
- }
第7行又打印了s1.Name
执行结果
???结果没修改,what。
代码二
- func (this *Student) say1() {
- fmt.Printf("我是%v,我今年%v岁了,我的手机号是%v\n", this.Name, this.Age, this.phone)
- this.Name = "666"//这里修改了Name为其他值
- }
第一行修改为*了
- func main() {
- //调用构造方法
- var s1 = NewStudent("张三", 18, "1111")
- //调用Student绑定的say方法
- s1.say1()
- //打印s1.Name
- fmt.Println(s1.Name)
- }
执行结果
这次可以看到,结果变了,在其他函数修改了Name,影响了整个s1的Name。
结论
总结
上述我们讲述了一些Go语言中面向对象的一些知识。包括有构造函数,函数绑定结构体,函数绑定结构体参数是指针和无指针区别。
本文转载自微信公众号「Go语言进阶学习」,可以通过以下二维码关注。转载本文请联系Go语言进阶学习公众号。
当前题目:Go语言基础之结构体(夏日篇)
标题网址:http://www.shufengxianlan.com/qtweb/news17/555967.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联