zoukankan      html  css  js  c++  java
  • 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!!!
  • 相关阅读:
    异常之*** buffer overflow detected ***
    多媒体开发之视频回放---dm642 做rtsp 视频回放功能
    理财---炒股之kdj
    多媒体开发之rtp 打包发流--- 从h264中获取分辨率
    多媒体开发之rtsp 实现rtsp over tcp/http/udp---rtsp发送
    tomcat 简介
    tomcat 的安装
    rsync + inotify-tools实现文件的实时同步
    python 生成器
    ansible 常用模块
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15252884.html
Copyright © 2011-2022 走看看