• 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!!!
  • 相关阅读:
    Vue应用框架整合与实战--Vue技术生态圈篇
    SpringBoot2.0之八 多数据源配置
    SpringBoot2.0之七 实现页面和后台代码的热部署
    SpringBoot2.0之六 多环境配置
    SpringBoot2.0之五 优雅整合SpringBoot2.0+MyBatis+druid+PageHelper
    SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍
    @getMapping与@postMapping
    701搜商家电话直通 网络黄页完成“终极使命”
    根据经纬度计算距离
    微网站
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15252884.html
Copyright © 2020-2023  润新知