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语言中没有提供构造函数相关的特殊机制,用户根据自己的需求,将参数使用函数传递到结构体构造参数中即可完成构造函数的任务

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/15252884.html