• 技术文章 >后端开发 >Golang

    go语言有构造函数吗

    青灯夜游青灯夜游2023-01-10 14:15:42原创42

    go语言没有构造函数。go语言作为结构化的语言是没有面向对象语言中的构造方法的,不过可以通过一些方式实现类似的面向对象语言中构造方法的效果,也就是使用结构体初始化的过程来模拟实现构造函数。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    构造函数是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。

    Golang作为结构化的语言是没有面向对象语言中的构造方法的,但是Golang却可以像C++一样实现类似继承、构造函数一样等面向对象编程的思想和方法。

    因为 struct 是值类型,如果结构体比较复杂的话,值拷贝 性能开销会比较大,所以该构造函数返回的是结构体指针类型。

    规范

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

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

    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,
        }
    }

    代码说明如下:

    在这个例子中,颜色和名字两个属性的类型都是字符串,由于Go语言中没有函数重载,为了避免函数名字冲突,使用 NewCatByName() 和 NewCatByColor() 两个不同的函数名表示不同的 Cat 构造过程。

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

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

    代码说明如下:

    这个例子中,Cat 结构体类似于面向对象中的“基类”,BlackCat 嵌入 Cat 结构体,类似于面向对象中的“派生”,实例化时,BlackCat 中的 Cat 也会一并被实例化。

    总之,Go语言中没有提供构造函数相关的特殊机制,用户根据自己的需求,将参数使用函数传递到结构体构造参数中即可完成构造函数的任务。

    【相关推荐:Go视频教程编程教学

    以上就是go语言有构造函数吗的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:go语言中切片怎么加元素 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • go语言怎么进行强制类型转换• go语言有没有while• go语言怎么设置时区• go语言常量有多少种• Go语言中匿名变量是什么• Go中数值类型有几种
    1/1

    PHP中文网