Go语言构造函数
来源:云海天教程
时间:2023-01-07 12:09:23 442浏览 收藏
本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Go语言构造函数》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~
Go语言的类型或结构体没有构造函数的功能,但是我们可以使用结构体初始化的过程来模拟实现构造函数。其他编程语言构造函数的一些常见功能及特性如下:每个类可以添加构造函数,多个构造函数使用函数重载实现。构造函数一般与类名同名,且没有返回值。构造函数有一个静态构造函数,一般用这个特性来调用父类的构造函数。对于 C++ 来说,还有默认构造函数、拷贝构造函数等。
多种方式创建和初始化结构体——模拟构造函数重载
如果使用结构体描述猫的特性,那么根据猫的颜色和名字可以有不同种类的猫,那么不同的颜色和名字就是结构体的字段,同时可以使用颜色和名字构造不同种类的猫的实例,这个过程可以参考下面的代码:type Cat struct { Color string Name string}func NewCatByName(name string) *Cat { return &Cat{ Name: name, }}func NewCatByColor(color string) *Cat { return &Cat{ Color: color, }}代码说明如下:第 1 行定义 Cat 结构,包含颜色和名字字段。第 6 行定义用名字构造猫结构的函数,返回 Cat 指针。第 7 行取地址实例化猫的结构体。第 8 行初始化猫的名字字段,忽略颜色字段。第 12 行定义用颜色构造猫结构的函数,返回 Cat 指针。
在这个例子中,颜色和名字两个属性的类型都是字符串,由于Go语言中没有函数重载,为了避免函数名字冲突,使用 NewCatByName() 和 NewCatByColor() 两个不同的函数名表示不同的 Cat 构造过程。
带有父子关系的结构体的构造和初始化——模拟父级构造调用
黑猫是一种猫,猫是黑猫的一种泛称,同时描述这两种概念时,就是派生,黑猫派生自猫的种类,使用结构体描述猫和黑猫的关系时,将猫(Cat)的结构体嵌入到黑猫(BlackCat)中,表示黑猫拥有猫的特性,然后再使用两个不同的构造函数分别构造出黑猫和猫两个结构体实例,参考下面的代码:type Cat struct { Color string Name string}type BlackCat struct { Cat // 嵌入Cat, 类似于派生}// “构造基类”func NewCat(name string) *Cat { return &Cat{ Name: name, }}// “构造子类”func NewBlackCat(color string) *BlackCat { cat := &BlackCat{} cat.Color = color return cat}代码说明如下:第 6 行,定义 BlackCat 结构,并嵌入了 Cat 结构体,BlackCat 拥有 Cat 的所有成员,实例化后可以自由访问 Cat 的所有成员。第 11 行,NewCat() 函数定义了 Cat 的构造过程,使用名字作为参数,填充 Cat 结构体。第 18 行,NewBlackCat() 使用 color 作为参数,构造返回 BlackCat 指针。第 19 行,实例化 BlackCat 结构,此时 Cat 也同时被实例化。第 20 行,填充 BlackCat 中嵌入的 Cat 颜色属性,BlackCat 没有任何成员,所有的成员都来自于 Cat。
这个例子中,Cat 结构体类似于面向对象中的“基类”,BlackCat 嵌入 Cat 结构体,类似于面向对象中的“派生”,实例化时,BlackCat 中的 Cat 也会一并被实例化。
总之,Go语言中没有提供构造函数相关的特殊机制,用户根据自己的需求,将参数使用函数传递到结构体构造参数中即可完成构造函数的任务。
以上就是《Go语言构造函数》的详细内容,更多关于golang的资料请关注golang学习网公众号!
-
377 收藏
-
125 收藏
-
201 收藏
-
183 收藏
-
440 收藏
-
234 收藏
-
155 收藏
-
457 收藏
-
309 收藏
-
225 收藏
-
485 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习