三十golang--面向对象

首先我们要明确:

  • golang并不是纯粹的面向对象的编程语言;
  • golang没有类class,使用struct代替;
  • golang面向对象编程非常简洁,去掉了传统的继承、重载、构造函数和析构函数、隐藏的this指针等;
  • golang仍然有面向对象编程的继承、封装和多态的特性,只是实现的方法和其他oop语言不一样;
  • golang耦合性低,非常灵活;面向接口编程是非常重要的特性;

 从这可以看出,结构体其实是我们自己定义的数据类型;结构体变量是具体的,实际的,代表一个具体变量;

申明结构体的几种方式:

  • var person Person
  • var person Person = Person(“Tom”,20)
  • var person *Person = new(Person)

  • var person *Person = &Person()

结构体类型内存的分配机制:

 

 

可以看出,各结构体之间是相互不影响的。

 

 

 这种方式则p2是一个指针,指向p1,修改p2的值会同时修改p1的值。

结构体的使用细节:

  • 结构体的字段是在内存中连续的;

     

    对于第二种指针,在内存中的示意图:

     

     

     首先,绿色块四个数据的的地址是连续的,然后两个绿色块的地址是连续的,也就是红色框中的地址,而指向红色框的地址是不连续的,相差16?

  • 结构体是用户自己定义的类型,和其它类型进行转换需要完全相同的字段名;
  • 结构体进行type重新定义(相当于取别名),golang认为是新的数据类型,但是可以强转;
  • 在结构体的字段上,还可以取一个标签tag,该tag可以通过反射机制获取,常见的使用场景是序列化和反序列化;

     

    将输出转换成了小写。 

方法:作用在指定数据类型上的,因此,自定义数据类型,也可以有方法。

 

 

 这里test方法是针对于Person类型绑定;test方法只能通过Person类型的变量来调用;这里方法里面的p相当于是一个形参;

 

 

 

方法的声明:

func (recevier type) methodName(参数列表) (返回值列表){

  方法体

  return 返回值

}

使用事项:

  • 结构体类型是值类型;
  • 如果一个变量实现了string方法,那么fmt.Println默认会调用这个变量的String进行输出;

方法和函数的主要区别:

(1)在调用时的区别,变量.方法名

(2)函数只能接受与之对应的值类型或者引用类型;

(3)方法既可以接受引用类型,也可接受值类型,因为底层会对其做一个优化;主要是看和什么类型进行拷贝的;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Golang的文档和社区资源:为什么它可以帮助开发人员快速上手?
Golang:AI 开发者的实用工具
Golang的标准库:为什么它可以大幅度提高开发效率?
Golang的部署和运维:如何将应用程序部署到生产环境中?
高性能AI开发:Golang的优势所在
本篇文章和大家了解一下go语言开发优雅得关闭协程的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1.简介本文将介绍首先为什么需要主...
这篇文章主要介绍了Go关闭goroutine协程的方法,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。1.简介本文将介绍首先为什么需要主动关闭gor...
本篇文章和大家了解一下go关闭GracefulShutdown服务的几种方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。目录Shutdown方法Regi...
这篇文章主要介绍了Go语言如何实现LRU算法的核心思想和实现过程,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。GO实现Redis的LRU例子常
今天小编给大家分享的是Go简单实现多租户数据库隔离的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会...
这篇“Linux系统中怎么安装NSQ的Go语言客户端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希
本文小编为大家详细介绍“怎么在Go语言中实现锁机制”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在Go语言中实现锁机制”文章能帮助大家解决疑惑,下面...
今天小编给大家分享一下Go语言中interface类型怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考
这篇文章主要介绍“怎么以正确的方式替换Go语言程序自身”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希
本文小编为大家详细介绍“Go语言中除法运算的效率怎么提高”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中除法运算的效率怎么提高”文章能帮助大家解...
本文小编为大家详细介绍“Go语言中的next()方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中的next()方法怎么使用”文章能帮助大家解决疑...
这篇文章主要介绍了Go语言中slice的反转方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言中slice的反转方法怎...
这篇文章主要介绍“怎么使用Go语言实现数据转发功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Go语
这篇文章主要讲解了“Go语言中怎么实现代码跳转”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究
这篇文章主要讲解了“Go语言如何多开协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言如何多开协...