5.2. 构造函数

Go语言没有构造函数的功能,函数体的初始化可以使用函数封装实现。

5.2.1. 1.多种方式创建和初始化结构体-模拟构造函数重载

package main

import "fmt"

type Cat struct {
    Color string
    Name string
}

func NewCatByName(name string) *Cat {
    return &Cat{
        Name: name,
    }
}

func NewByColor(color string) *Cat {
    return &Cat{
        Color: color,
    }
}

func main() {
    name := NewCatByName("元宝")
    fmt.Println(name.Name)
    color := NewByColor("金黄色")
    fmt.Println(color.Color)
}

5.2.2. 2.带有父子关系的结构体的构造和初始化-模拟父级构造调用

package main

import "fmt"

type Cat struct {
    Name  string
    Color 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
}

func main() {
    hu := NewCat("huxiaojian")
    fmt.Println(hu.Name)

    hu_color := NewBlackCat("白色")
    fmt.Println(hu_color.Color)
}