9.10Go之结构体之构造函数
作者:互联网
9.10Go之结构体之构造函数
构造函数的特点
-
Go语言的类型或结构体没有构造函数的功能
-
可以使用结构体初始化的过程来模拟实现构造函数
多种方式创建和初始化结构体——模拟构造函数重载
本质:
-
构造一个结构体,在多个函数当中实例化该结构体
示例代码:
需求:
-
使用结构体描述猫的特性
-
根据猫的颜色和名字描述
package main
/*
创建一个猫的结构体
*/
type Cat struct {
Color string
Name string
}
/*
实例化猫的名字的函数
*/
func NewCatName(name string) *Cat {
//返回值中构造结构体实例
return &Cat{
Name: name,
}
}
/*
实例化猫的颜色的函数
*/
func NewCatColor(color string) *Cat {
return &Cat{
Color: color,
}
}
带有父子关系的结构体的构造和初始化——模拟父级构造调用
本质:
-
类似
Java
当中的父类、子类的关系。内嵌结构体。结构体相当于子类。内嵌的结构体相当于父类。 -
实例化结构体可以使用内嵌结构体的成员
示例代码:
需求:
-
创建一个黑猫结构体,内嵌猫结构体
-
创建猫结构体,定义猫这种动物应有的行为(成员)
-
构造基类实例
-
构造子类实例
package main
/*
创建一个猫的基类
*/
type AnotherCat struct {
Color string
Name string
}
/*
创建一个黑猫的子类,内嵌基类
定义 BlackCat 结构,并嵌入了 Cat 结构体,BlackCat 拥有 Cat 的所有成员,实例化后可以自由访问 Cat 的所有成员。
*/
type BlackCat struct {
AnotherCat
}
/*
创建一个构造基类的函数
*/
func NewCat(color string) *AnotherCat {
//返回时实例化基类
return &AnotherCat{
Color: color,
}
}
/*
创建一个构造子类的函数
NewBlackCat() 使用 color 作为参数,构造返回 BlackCat 指针
*/
func NewBlackCat(name string) *BlackCat {
//返回时实例化子类并且初始化黑猫子类的成员
Bcat := &BlackCat{}
/*
实例化 BlackCat 结构,此时 Cat 也同时被实例化
--->实例化子类结构体基类结构体同时被实例化
类似于面向对象中的“派生”,实例化时,BlackCat 中的 Cat 也会一并被实例化
*/
Bcat.Name = "Luci"
Bcat.Color = "Red"
//返回构造实例的子类实例
return Bcat
}
小结:
Go语言中没有提供构造函数相关的特殊机制,用户根据自己的需求,将参数使用函数传递到结构体构造参数中即可完成构造函数的任务
标签:string,BlackCat,Cat,体之,实例,Go,构造函数,结构 来源: https://www.cnblogs.com/JunkingBoy/p/15252884.html