Go语言基础之结构体(夏日篇)

IT科技2025-11-05 05:00:06918

 前言

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岁了,我的手机号是%vn", 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岁了,我的手机号是%vn", this.Name, this.Age, this.phone) } 

执行结果和上述一摸一样。

函数绑定结构体(指针方式和普通方式区别)

通常来说,一般使用指针的方式居多。

嗯...不是居多,是基本都是。

区别

代码一

func (this Student) say1() {     fmt.Printf("我是%v,我今年%v岁了,我的手机号是%vn", 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岁了,我的手机号是%vn", 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语言进阶学习公众号。

本文地址:http://www.bzve.cn/news/584a66098755.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

Win764位安装教程(轻松学会Win764位系统的安装与设置)

有了二叉查找树、平衡树为啥还需要红黑树?

通过几段 Java 代码带你理解 RPC

Vue 中,如何将函数作为 props 传递给组件

电脑开机不出密码错误的原因与解决方法(探究密码错误问题及有效解决方案)

鲜为人知的4个Python功能,用对了事半功倍

「面试题」20+Vue面试题整理

零学习成本:使用 Web 标准开发动态化 Flutter 应用

友情链接

滇ICP备2023006006号-39