go语言学习笔记 — 基础 — 高级数据类型 — 结构体(4):构造函数 — 封装结构体和类型的一系列初始化操作(封装数据)

本文介绍了在Go语言中如何通过函数封装来模拟构造函数的功能,分别展示了如何通过NewCatByName和NewCatByColor函数创建不同参数的猫结构体实例。此外,还探讨了如何模拟类的继承,通过将Cat结构体嵌入BlackCat结构体中实现黑猫的派生,并提供了NewBlackCat函数来实例化黑猫。这种方法在Go中实现了类似面向对象编程的特性。
摘要由CSDN通过智能技术生成

go没有构造函数的功能,结构体初始化过程可以使用函数封装实现。

1. 模拟构造函数重载

使用结构体描述猫的属性,根据颜色和名字区分不同的猫。使用颜色和名字两个属性作为猫结构体的两个字段,用于构造不同猫的实例。

// 定义Cat类型,包含颜色和名字两个成员变量字段
type Cat struct {
    Color string
    Name string
}

// 构造猫函数,用名字入参填充Cat结构体,返回Cat指针类型
func NewCatByName(name string) *Cat {
    return &Cat{    // 返回Cat类型的实例
        Name: name,
    }
}

// 构造猫函数,用颜色入参,返回Cat指针类型
func NewCatByColor(color string) *Cat {
    return &Cat{
        Color: color,  // 入参处理
    }
}

注:*Cat是Cat指针类型;&Cat{Color:color,}返回对应结构体实例的内存地址。

go没有函数重载,为了避免函数名冲突,使用NewCatByColor和NewCatByName两个函数表示不同的过程。

用户根据自己需要,使用函数,把参数传递到结构体填充位置,即可完成构造函数。


2. 模拟父子级构造调用

黑猫是一种猫,同时描述这两种概念,就是派生。黑猫派生自猫,使用结构体描述这种关系,把猫结构体(Cat)嵌入黑猫(BlackCat)中,表示黑猫有猫的属性,然后使用构造函数实例化猫结构体(Cat)和黑猫(BlackCat)结构体。

type Cat struct {
    Color string
    Name string
}

// 定义BlackCat结构体,嵌入Cat,类似派生。
// BlackCat拥有Cat的所有成员变量,实例化后,可以自由访问Cat的所有成员
type BlackCat struct{
    Cat               
}

// 构造基类Cat实例
func NewCat(name string) *Cat {
    return &Cat{
        Name: name,
    }
}

// 构造子类BlackCat实例
func NewBlackCat(color string) *BlackCat {
    cat := &BlackCat{}  // 实例化BlackCat结构体,同时Cat也被实例化
    cat.Color = color   // 填充BlackCat中嵌入Cat的成员变量Color,BlackCat的成员变量都来自Cat
    return cat          // 返回*BlackCat结构体指针类型
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值