(三十)golang--面向对象
2024-09-06 09:58:28
首先我们要明确:
- 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)方法既可以接受引用类型,也可接受值类型,因为底层会对其做一个优化;主要是看和什么类型进行拷贝的;
最新文章
- Spring7:基于注解的Spring MVC(下篇)
- Xen之初体验:HA(额外附加)
- map和list遍历基础
- 51nod1711 平均数
- merge into update
- C语言中fgetc、fputc和getc、putc的区别是什么
- cocos2d疑问
- bootstrap瀑布流代码
- Android Fragment中使用Intent组件拍照
- Jump Game 解答
- Swing-email(转)
- matlab find函数
- setInterval()与setTimeout()的区别
- bzoj5358
- SpringMVC 允许跨域访问 也可以选择限制指定IP 允许访问 对象的数据传输
- 第六章:声明式服务调用:Spring Cloud Feign
- 解决AD9中“......has no driver”的问题
- Atitit 类库冲突 解决方案
- go语言字符串处理
- MySQL大表DROP删除小技巧(转)
热门文章
- 大话设计模式Python实现-解释器模式
- ASP.NET ---- Repeater 遍历出省市
- ARM64 的 memcpy 优化与实现
- 【mysql】You must reset your password using ALTER USER statement before executing this statement. 报错处理
- pymongo和mongoengine安装和使用教程 包含常用命令行和代码示例 | pymongo and mongoengine tutorial on ubuntu 16.04
- Octave Convolution详解
- Android方法数超出限定的问题(multiDex,jumboMode)
- python字典的常用方法
- 用ASP.NET Core构建可检测的高可用服务--学习笔记
- IIS 上部署 ASP.NET Core 应用程序