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
}
小结:
原文:https://www.cnblogs.com/JunkingBoy/p/15252884.html