• Go从入门到精通——结构体(struct)——初始化结构体的成员变量


    初始化结构体的成员变量

      结构体在实例化时可以直接对成员变量进行初始化。

      初始化有两种形态:

        1、字段 "键值对" 形式及多个值的列表形式。(键值对形式的初始化适合选择性填充字段较多的结构体)

        2、多个值的列表形式适合填充字段较少的结构体。

    一、使用“键值对”初始化结构体

      结构体可以使用“键值对”(key value pair)初始化字段,每个 "键"(key)对应结构体中的一个字段。键的“值”(value)对应字段需要初始化的值。

      键值对的填充是可选的,不需要初始化的字段可以不填入初始化列表中。

      结构体实例化后字段的默认值是字段类型的默认值,也就是零值。例如:数值为0,字符串Wie空字符串,布尔为 false,指正为 nil 等。

        1、键值对初始化结构体的书写格式

      键值对初始化的格式如下:

    ins := 结构体类型名{
        字段1: 字段1的值,
        字段2: 字段2的值,
        ...
    }
    

        2、使用键值对填充结构体的例子

      下面例子中描述了家里的人物关联。正如儿歌里唱的:“爸爸的爸爸是爷爷”,人物之间可以使用多级的 child 来描述和建立关联。使用键值对形式填充结构体的代码如下:

    package main
     
    type People struct {
        name string
        child *People
    }
    
    relation := &Peolple{
        name: "爷爷",
        child: &People{
            name: "爸爸",
            child: &Peole{
                name: "我",
            },
        },
    }

    二、使用多个值的列表初始化结构体

      Go 语言可以在 "键值对" 初始化的基础上忽略 "键"。也就是,可以使用多个值的列表初始化结构体的字段。

        1、多个值列表初始化结构体的书写格式

      多个值使用逗号分隔初始化结构体,例如:

    ins := 结构体类型名{
        字段 1 的值,
        字段 2 的值,
        ...
    }
    

      使用这种格式是初始化时,需要注意:

    • 必须初始化结构体的所有字段。
    • 每一个初始值的填充顺序必须与字段在结构体中声明顺序一致。
    • 键值对与值列表的初始化形式不能混用。

        2、多个值列表初始化结构体的例子

    package main
     
    type Address struct{
        Province string
        City    string
        ZipCode int
        PhoneNumber string
    }
    
    add := Address{
        "四川",
        "成都",
        610000,
        "0",
    }

    三、初始化匿名结构体

      匿名结构体没有类型名称,无须通过 type 关键字就可以直接使用。

        1、匿名结构体定义格式和初始化写法

      匿名结构体的初始化写法由结构体定义和键值对初始化两部分组成。结构体定义时没有结构体类型名,只有字段和类型定义。键值对初始化部分由可选的多个键值对组成,如下格式所示:

    ins := struct{
        //匿名结构体字段定义
        字段 1 字段类型1
        字段2  字段类型2
        ...
    }{
        //字段值初始化
        初始化字段 1: 字段 1 的值,
        初始化字段 2: 字段 2 的值,
        ...
    }
    • 字段1、字段2……:及饿哦固体定义的字段名。
    • 初始化字段1、初始化字段2……: 结构体初始化时的字段名,可选择性地对字段初始化。
    • 字段类型1、字段类型2……: 结构体定义字段的类型。
    • 字段1的值,字段2的值……:结构体初始化字段的初始值。

    键值对初始化部分是可选的,不初始化成员时,匿名结构体的格式变为:

    ins := struct{
        字段 1 字段类型 1
        字段 2 字段类型 2
        ...
    }{}
    

    2、使用匿名结构体的例子

    package main
     
    import "fmt"
    
    //定义 printMsgType()函数,参数为 msg,类型为 *struct{id int data string}。
    //因为没有使用type定义,所以需要在用到的地方每次进行定义。 func printMsgType(msg *struct { id int data string }){ //使用动词 %T 打印 msg 的类型 fmt.Printf("%T\n", msg) } func main(){ //实例化一个匿名结构体。对匿名结构体进行实例化,同时初始化成员 msg := &struct{ id int data string }{ 1024, "hello" } printMsgType(msg) }

      匿名结构体在使用时需要重新定义,造成大量的重复的代码,因此开发中较少使用。

  • 相关阅读:
    Spring MVC Ajax 嵌套表单数据的提交
    Spring MVC 过滤静态资源访问
    Spring MVC 页面跳转时传递参数
    IDEA Maven 三层架构 2、运行 springMVC
    IDEA Maven 三层架构 1、基本的Archetype 搭建
    EasyUI DataGrid 基于 Ajax 自定义取值(loadData)
    Spring MVC Ajax 复杂参数的批量传递
    Mybatis Sql片段的应用
    在 Tomcat 8 部署多端口项目
    自动升级的设计思路与实现
  • 原文地址:https://www.cnblogs.com/zuoyang/p/16325156.html
Copyright © 2020-2023  润新知