zoukankan      html  css  js  c++  java
  • 9.10Go之结构体之初始化结构体成员变量

    9.10Go之结构体之初始化结构体成员变量

    成员变量初始化特点

    • 结构体初始化时可以直接对成员变量进行初始化

    形式:

    • 键值对的形式(key value pair)

    • 键值对形式的初始化适合选择性填充字段较多的结构体

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

    初始化结构体格式

    • 使用"键值对"初始化结构体

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

    • 初始化匿名结构体


    使用"键值对"初始化结构体

    特点:

    • 每个“键”(Key)对应结构体中的一个字段,键的“值”(Value)对应字段需要初始化的值

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

    • 结构体实例化后字段的默认值是字段类型的默认值--->因为结构体可以是基本类型的复合类型

    使用键值对初始化结构体的格式:

    ins := 结构体类型名{
       字段1: 字段1的值,
       字段2: 字段2的值,
       
    }
    • 结构体类型:定义结构体时的类型名称。

    • 字段1、字段2:结构体成员的字段名,结构体类型名的字段初始化列表中,字段名只能出现一次。

    • 字段1的值、字段2的值:结构体成员字段的初始值。

    键值之间以:分隔,键值对之间以,分隔

    使用键值对填充结构体的实例:

    需求:

    • 写一个人物关系结构体

    • 法德的法德是格瑞法德

    • 法德的桑是自己

    package main

    import "fmt"

    /*
    写一个People结构体
    两个成员:
    1、name
    2、指向自己
    */
    type People struct {
    Name string
    Child *People
    }

    func main() {
    //初始化结构体的成员
    relation := &People{
    Name: "外祖父",
    Child: &People{
    Name: "父亲",
    Child: &People{
    Name: "自己",
    /*
    因为需要初始化的结构体成员可以自定义,所以可以套娃
    */
    },
    },
    }
    fmt.Println(relation)
    }

    结构体成员中只能包含结构体的指针类型,包含非指针类型会引起编译错误

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

    特点:

    • 在“键值对”初始化的基础上忽略“键”,使用多个值的列表初始化结构体的字段

    使用多个值列表初始化结构体的格式:

    ins := 结构体类型名{
       字段1的值,
       字段2的值,
       
    }
    • 必须初始化结构体的所有字段。

    • 每一个初始值的填充顺序必须与字段在结构体中的声明顺序一致。

    • 键值对与值列表的初始化形式不能混用。

    使用多值列表初始化结构体的代码示例:

    需求:

    • 创建一个地址结构体

    • 包含省份、城市、邮编等成员

    • 使用多值列表对其进行初始化

    package main

    import "fmt"

    /*
    创建一个省份结构体
    */
    type Address struct {
    Province string
    City string
    Code int64
    }

    func main() {
    address := Address{
    "广西",
    "柳州",
    545001,
    }
    fmt.Println(address)
    }

    初始化匿名结构体

    特点:

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

    匿名结构体格式:

    ins := struct {
       // 匿名结构体字段定义
       字段1 字段类型1
       字段2 字段类型2
       
    }{
       // 字段值初始化
       初始化字段1: 字段1的值,
       初始化字段2: 字段2的值,
       
    }
    • 字段1、字段2:结构体定义的字段名。

    • 初始化字段1、初始化字段2:结构体初始化时的字段名,可选择性地对字段初始化。

      • 初始化字段是可选的,不初始化的成员结构:

      • ins := struct {
           字段1 字段类型1
           字段2 字段类型2
           
        }
    • 字段类型1、字段类型2:结构体定义字段的类型。

    • 字段1的值、字段2的值:结构体初始化字段的初始值。

    使用匿名结构体的示例代码:

    需求:

    • 创建一个信息匿名结构体

    • 打印结构体内容

    package main

    import "fmt"

    /*
    创建一个创建匿名结构体并且打印的函数
    使用字符串格式化中的%T动词,将 msg 的类型名打印出来
    */
    func printMes(mes *struct{ id int; data string }) {
    fmt.Printf("%T ", mes)
    }

    func main() {
    //实例化匿名结构体
    msg := &struct {
    //定义成员部分
    id int
    data string
    }{
    //初始化值
    1024,
    "Hello",
    }

    //调用打印方法
    printMes(msg)
    }

     

    It's a lonely road!!!
  • 相关阅读:
    [转]老男孩读pcie
    nand
    面试题目汇总
    redis的tcp-backlog配置
    Redis 3.0.4 sentinels
    Redis 3.0.4 客户端
    Redis 3.0.4 事件驱动
    Redis 3.0.4 AOF持久化
    Redis 3.0.4 数据库
    Redis 3.0.4 RDB持久化
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15252883.html
Copyright © 2011-2022 走看看