美文网首页
Go语言中结构体的构造函数

Go语言中结构体的构造函数

作者: 码二哥 | 来源:发表于2020-02-09 11:24 被阅读0次

参考:
http://c.biancheng.net/view/68.html

关键点

希望通过下面的关键词,能够实现目的:能够快速回忆理解复习 知识点:

1、Go语言中,没有构造函数,只能通过构建实例过程,进行模拟

2、Go语言中,没有函数的重载,也就说,函数的名称不能一样

3、带有父子关系结构体构造初始化——模拟父级构造调用

Go语言的类型或结构体没有构造函数的功能,但是我们可以使用结构体初始化的过程来模拟实现构造函数。

其他编程语言构造函数的一些常见功能及特性如下:

  • 每个类可以添加构造函数,多个构造函数使用函数重载实现。

  • 构造函数一般与类名同名,且没有返回值。

  • 构造函数有一个静态构造函数,一般用这个特性来调用父类的构造函数。

  • 对于 C++ 来说,还有默认构造函数、拷贝构造函数等。

1、多种方式创建初始化结构体——模拟构造函数重载

如果使用结构体描述猫的特性,那么根据猫的颜色和名字可以有不同种类的猫,那么不同的颜色和名字就是结构体的字段,同时可以使用颜色和名字构造不同种类的猫的实例,这个过程可以参考下面的代码:

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 构造过程。

2、带有父子关系的结构体的构造初始化——模拟父级构造调用

黑猫是一种猫,猫是黑猫的一种泛称,同时描述这两种概念时,就是派生,黑猫派生自猫的种类,使用结构体描述猫和黑猫的关系时,将猫(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 也会一并被实例化。

3、总之,

Go语言中没有提供构造函数相关的特殊机制,用户根据自己的需求,

参数使用函数传递到结构体构造参数中即可完成构造函数的任务。

相关文章

  • Go语言中结构体的构造函数

    参考:http://c.biancheng.net/view/68.html 关键点 希望通过下面的关键词,能够实...

  • C语言基础6

    结构体概述 1 在C语言中,结构体(struct)指的是一种数据结构,是C语 言中构造类型的其中之一。 2 在实际...

  • Swift 2 学习笔记 11.结构体

    课程来自慕课网liuyubobobo老师 结构体 结构体基础 结构体之构造函数 结构体之可失败的构造函数 在结构体...

  • 结构体

    结构体初识 结构体指针 结构体的匿名字段 结构体嵌套 Go语言中的OOP

  • Swift基础语法-结构体,构造函数,(系统结构体)扩充函数,值

    知识点 基本概念 结构体的基本使用 结构体构造器(构造函数/构造方法) 结构体扩充函数(方法), 又称成员方法 结...

  • 程序实体与代码块

    程序实体 Go语言中的程序实体包括变量、常量、函数、结构体和接口。 代码块 在Go语言中,代码块一般就是一个由花括...

  • 12-Go语言结构体

    结构体 结构体的基本概念 什么是结构体Go语言中的结构体几乎和C语言中的结构体一模一样都需要先定义结构体类型, 再...

  • Go语言-程序实体与关键字

    任何Go语言源码文件都由若干个程序实体组成的。在Go语言中,变量、常量、函数、结构体和接口被统称为“程序实体”,...

  • 13-GoLang结构体

    结构体 Go语言中的结构体几乎和C语言中的结构体一模一样都需要先定义结构体类型, 再定义结构体变量都是用来保存一组...

  • 《Go 语言圣经》读书笔记二

    如果要在函数内部修改结构体成员的话,用指针传入是必须的;因为在Go语言中,所有的函数参数都是值拷贝传入的,函数参数...

网友评论

      本文标题:Go语言中结构体的构造函数

      本文链接:https://www.haomeiwen.com/subject/tmygxhtx.html