zhcn 编程语言 Golang Golang 流程控制 非公開: Go语言初始化结构体成员变量

Go语言初始化结构体成员变量

实例化结构体时可以直接初始化成员变量。初始化有两种形式:字段的键值对格式和多个值的列表。多值列表格式适用于需要填写的字段较少的结构。

使用“键值对”初始化结构。

结构体可以使用“键值对”(键值对)来初始化其字段。每个“键”(key)对应结构体中的一个字段,而一个键(value)的“值”则对应该字段的值。要初始化的字段。

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

结构体实例化后字段的默认值就是该字段类型的默认值。例如,值是 0,字符串是“”(空字符串),布尔值是 false,指针是 nil,等等。

1)键值对初始化结构描述格式

键值对初始化的格式为:

ins := 構造体の型名{
    フィールド 1: フィールド 1 の値,
    フィールド 2: フィールド 2の値,
    …
}

下面是每个部分的描述。

  • 结构类型:定义结构时键入名称。
  • 字段1、字段2:结构体成员的字段名称。字段名称只能在结构类型名称的字段初始化列表中出现一次。
  • 字段1的值、字段2的值:结构体成员字段的初始值。

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

2)将键值对输入结构体的示例

下面的例子描述了一个家庭中人物之间的关系,就像童谣“爸爸的爸爸是爷爷”中那样。您可以使用多个级别的子级来说明和建立角色之间的关系。填充该结构的代码键值对的格式为:

 type People struct {
    name  string
    child *People
}

relation := &People{
    name: "MyName",
    child: &People{
        name: "MyChildName",
        child: &People{
                name: "MyChildChildName",
        },
    },
} 

代码说明如下:

  • 第 1 行定义 People 结构。
  • 第 2 行,结构体的字符串字段。
  • 第3行,结构体的结构体指针字段,类型为*People。
  • 第6行,从People类型获取关系地址后,形成*People类型的实例。
  • 第 8 行在子进程初始化时需要 *People 类型的值,并使用该地址来初始化 People。

提示:结构体成员中只能包含结构体指针类型;包含非指针类型将导致编译错误。

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

Go语言可以根据“键值对”初始化来忽略“键”。也就是说,您可以使用多个值的列表来初始化结构体中的字段。

1)多值列表初始化结构体的描述格式

多个值用逗号初始化。例子:

ins := 構造体型名{
    フィールド 1 の値、
    フィールド 2 の値、
    …
}

以此格式初始化时,请注意以下事项:

  • 该结构的所有字段都必须初始化。
  • 输入每个初始值的顺序必须与结构中声明字段的顺序匹配。
  • 您不能混合键值对和值列表的初始化格式。

2) 使用多个值列表初始化结构体的示例

以下示例显示了地址结构并需要特定的地址顺序。例如:

 type Address struct {
    Province    string
    City        string
    ZipCode     int
    PhoneNumber string
}

addr := Address{
    "Tokyo",
    "Tokyo",
    123456,
    "123456789",
}

fmt.Println(addr) 

当您运行代码时,输​​出将如下所示:

{Tokyo Tokyo 123456 123456789}

初始化匿名结构

匿名结构没有类型名称,可以直接使用,无需使用 type 关键字定义。

1)匿名结构体定义格式及初始化描述方法

初始化匿名结构体由两部分组成:定义结构体和初始化键值对。结构体定义没有结构体类型名称,只有字段和类型定义。键值对的初始化部分由多个可选键组成。 -值对。格式为:

ins := struct {
    // 匿名構造体フィールド定義
    フィールド 1 フィールド タイプ 1
    フィールド 2 フィールド タイプ 2
    …
} {
    // フィールド値の初期化 初期化
    フィールド 1: フィールド 1 の値、
    初期化フィールド 2: フィールド 2 の値,
    …
}

下面是每个部分的描述。

  • Field1、Field2…:由结构体定义的字段名称。
  • 初始化字段1、初始化字段2…:结构体初始化时的字段名称;可以选择性地初始化字段。
  • 字段类型 1、字段类型 2…:该结构定义字段的类型。
  • Field 1 value、Field 2 value…:结构体初始化字段的初始值。

键值对初始化部分是可选的。如果成员未初始化,则匿名结构具有以下格式:

ins := struct {
    フィールド 1 フィールド タイプ 1
    フィールド 2 フィールド タイプ 2
    …
}

2) 使用匿名结构的示例

此示例使用匿名结构来定义和初始化消息结构。该消息结构具有消息标识部分(ID)和数据部分(data)。打印消息内容的 printMsg() 函数必须接收消息结构。为匿名结构参数重新定义匿名结构。这是代码:

 package main

import (
    "fmt"
)

// 匿名構造体を渡してメッセージの型をプリントする
func printMsgType(msg *struct {
    id   int
    data string
}) {

    fmt.Printf("%T\n", msg)
}

func main() {

    // 匿名構造体のインスタンス化
    msg := &struct {  // 定義部分
        id   int
        data string
    }{  // 値の初期化部分
        1024,
        "hello",
    }

    printMsgType(msg)
} 

这是代码输出:

*struct { id int; data string }

代码说明如下:

  • 第8行定义了 printMsgType() 函数,参数为 msg ,类型为*struct{id int data string} ,并且类型不是由 type 定义的,所以每次使用时都必须定义它。
  • 第 14 行使用字符串格式的%T动词打印 msg 的类型名称。
  • 第 20 行实例化一个匿名结构并初始化其成员。
  • 第 21 行和第 22 行定义了匿名结构的字段。
  • 第24行和第25行为匿名结构的字段分配初始值。
  • 第 28 行将 msg 传递给 printMsgType() 函数以进行函数调用。

匿名结构体的类型名是该结构体所包含的字段成员的详细描述,在开发中很少使用,因为使用时必须重新定义,导致大量重复代码。

《Go语言初始化结构体成员变量》浅显易懂的讲解!您必须观看的最佳 2 个视频

Go言語とは?|プログラミング言語のGo言語について3分でわかりやすく解説します【プログラミング初心者向け】
https://www.youtube.com/watch?v=3zfzBuDl6M4&pp=ygVFIEdv6KiA6Kqe44Gv5qeL6YCg5L2T44Gu44Oh44Oz44OQ44O85aSJ5pWw44KS5Yid5pyf5YyW44GX44G-44GZJmhsPUpB
【Go言語 超入門コース】06.変数 |変数は、例えるなら「箱」のこと。箱にデータを入れておくことができます【プログラミング初心者向け入門講座】
https://www.youtube.com/watch?v=yYpMaSHiDpk&pp=ygVFIEdv6KiA6Kqe44Gv5qeL6YCg5L2T44Gu44Oh44Oz44OQ44O85aSJ5pWw44KS5Yid5pyf5YyW44GX44G-44GZJmhsPUpB
实例化结构体时可以直接初始化成员变量。初始化有两种形式:字段的键值对格式和多个值的列表。多值列表格式适用于需要填写的字段较少的结构。

使用“键值对”初始化结构。

结构体可以使用“键值对”(键值对)来初始化其字段。每个“键”(key)对应结构体中的一个字段,而一个键(value)的“值”则对应该字段的值。要初始化的字段。

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

结构体实例化后字段的默认值就是该字段类型的默认值。例如,值是 0,字符串是“”(空字符串),布尔值是 false,指针是 nil,等等。

1)键值对初始化结构描述格式

键值对初始化的格式为:

ins := 構造体の型名{
    フィールド 1: フィールド 1 の値,
    フィールド 2: フィールド 2の値,
    …
}

下面是每个部分的描述。

  • 结构类型:定义结构时键入名称。
  • 字段1、字段2:结构体成员的字段名称。字段名称只能在结构类型名称的字段初始化列表中出现一次。
  • 字段1的值、字段2的值:结构体成员字段的初始值。

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

2)将键值对输入结构体的示例

下面的例子描述了一个家庭中人物之间的关系,就像童谣“爸爸的爸爸是爷爷”中那样。您可以使用多个级别的子级来说明和建立角色之间的关系。填充该结构的代码键值对的格式为:

 type People struct {
    name  string
    child *People
}

relation := &People{
    name: "MyName",
    child: &People{
        name: "MyChildName",
        child: &People{
                name: "MyChildChildName",
        },
    },
} 

代码说明如下:

  • 第 1 行定义 People 结构。
  • 第 2 行,结构体的字符串字段。
  • 第3行,结构体的结构体指针字段,类型为*People。
  • 第6行,从People类型获取关系地址后,形成*People类型的实例。
  • 第 8 行在子进程初始化时需要 *People 类型的值,并使用该地址来初始化 People。

提示:结构体成员中只能包含结构体指针类型;包含非指针类型将导致编译错误。

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

Go语言可以根据“键值对”初始化来忽略“键”。也就是说,您可以使用多个值的列表来初始化结构体中的字段。

1)多值列表初始化结构体的描述格式

多个值用逗号初始化。例子:

ins := 構造体型名{
    フィールド 1 の値、
    フィールド 2 の値、
    …
}

以此格式初始化时,请注意以下事项:

  • 该结构的所有字段都必须初始化。
  • 输入每个初始值的顺序必须与结构中声明字段的顺序匹配。
  • 您不能混合键值对和值列表的初始化格式。

2) 使用多个值列表初始化结构体的示例

以下示例显示了地址结构并需要特定的地址顺序。例如:

 type Address struct {
    Province    string
    City        string
    ZipCode     int
    PhoneNumber string
}

addr := Address{
    "Tokyo",
    "Tokyo",
    123456,
    "123456789",
}

fmt.Println(addr) 

当您运行代码时,输​​出将如下所示:

{Tokyo Tokyo 123456 123456789}

初始化匿名结构

匿名结构没有类型名称,可以直接使用,无需使用 type 关键字定义。

1)匿名结构体定义格式及初始化描述方法

初始化匿名结构体由两部分组成:定义结构体和初始化键值对。结构体定义没有结构体类型名称,只有字段和类型定义。键值对的初始化部分由多个可选键组成。 -值对。格式为:

ins := struct {
    // 匿名構造体フィールド定義
    フィールド 1 フィールド タイプ 1
    フィールド 2 フィールド タイプ 2
    …
} {
    // フィールド値の初期化 初期化
    フィールド 1: フィールド 1 の値、
    初期化フィールド 2: フィールド 2 の値,
    …
}

下面是每个部分的描述。

  • Field1、Field2…:由结构体定义的字段名称。
  • 初始化字段1、初始化字段2…:结构体初始化时的字段名称;可以选择性地初始化字段。
  • 字段类型 1、字段类型 2…:该结构定义字段的类型。
  • Field 1 value、Field 2 value…:结构体初始化字段的初始值。

键值对初始化部分是可选的。如果成员未初始化,则匿名结构具有以下格式:

ins := struct {
    フィールド 1 フィールド タイプ 1
    フィールド 2 フィールド タイプ 2
    …
}

2) 使用匿名结构的示例

此示例使用匿名结构来定义和初始化消息结构。该消息结构具有消息标识部分(ID)和数据部分(data)。打印消息内容的 printMsg() 函数必须接收消息结构。为匿名结构参数重新定义匿名结构。这是代码:

 package main

import (
    "fmt"
)

// 匿名構造体を渡してメッセージの型をプリントする
func printMsgType(msg *struct {
    id   int
    data string
}) {

    fmt.Printf("%T\n", msg)
}

func main() {

    // 匿名構造体のインスタンス化
    msg := &struct {  // 定義部分
        id   int
        data string
    }{  // 値の初期化部分
        1024,
        "hello",
    }

    printMsgType(msg)
} 

这是代码输出:

*struct { id int; data string }

代码说明如下:

  • 第8行定义了 printMsgType() 函数,参数为 msg ,类型为*struct{id int data string} ,并且类型不是由 type 定义的,所以每次使用时都必须定义它。
  • 第 14 行使用字符串格式的%T动词打印 msg 的类型名称。
  • 第 20 行实例化一个匿名结构并初始化其成员。
  • 第 21 行和第 22 行定义了匿名结构的字段。
  • 第24行和第25行为匿名结构的字段分配初始值。
  • 第 28 行将 msg 传递给 printMsgType() 函数以进行函数调用。

匿名结构体的类型名是该结构体所包含的字段成员的详细描述,在开发中很少使用,因为使用时必须重新定义,导致大量重复代码。

《Go语言初始化结构体成员变量》浅显易懂的讲解!您必须观看的最佳 2 个视频

Go言語とは?|プログラミング言語のGo言語について3分でわかりやすく解説します【プログラミング初心者向け】
https://www.youtube.com/watch?v=3zfzBuDl6M4&pp=ygVFIEdv6KiA6Kqe44Gv5qeL6YCg5L2T44Gu44Oh44Oz44OQ44O85aSJ5pWw44KS5Yid5pyf5YyW44GX44G-44GZJmhsPUpB
【Go言語 超入門コース】06.変数 |変数は、例えるなら「箱」のこと。箱にデータを入れておくことができます【プログラミング初心者向け入門講座】
https://www.youtube.com/watch?v=yYpMaSHiDpk&pp=ygVFIEdv6KiA6Kqe44Gv5qeL6YCg5L2T44Gu44Oh44Oz44OQ44O85aSJ5pWw44KS5Yid5pyf5YyW44GX44G-44GZJmhsPUpB