首页 > 编程笔记 > Go语言笔记

Go语言匿名结构体的用法

在 Go 语言中,匿名结构体和匿名函数是同一个概念,使用匿名结构体必须赋值给变量,否则没法使用。

匿名结构体的使用方法如下:
package main

import "fmt"

func main() {
    // 定义匿名结构体
    var p struct {
         name string
         age  int
    }
    // 使用匿名结构体并为成员赋值
    p.name = "Tom"
    p.age = 10
    fmt.Printf("匿名结构体的成员name:%v\n", p.name)
    fmt.Printf("匿名结构体的成员age:%v\n", p.age)

    // 定义匿名结构体并赋值
    p1 := struct {
         name string
         age  int
    }{
         name: "Tim",
         age: 20,
    }
    fmt.Printf("匿名结构体的成员name:%v\n", p1.name)
    fmt.Printf("匿名结构体的成员age:%v\n", p1.age)
}
上述示例列举了匿名结构体的两种使用方式,第一种使用关键字 var 定义,第二种使用 := 定义,并为匿名结构体成员设置初始值,每个成员值以键值对格式表示,每对键值对的末端必须使用逗号隔开。

代码运行结果为:

匿名结构体的成员name:Tom
匿名结构体的成员age:10
匿名结构体的成员name:Tim
匿名结构体的成员age:20

结构体匿名成员

匿名成员是指在结构体中没有明确定义成员名称,只定义了成员的数据类型,结构体在实例化的时候可以通过成员的数据类型进行访问,示例如下:
package main

import "fmt"

type person struct {
    // 定义结构体
    string
    int
    float64
    bool
}

func main() {
    // 实例化结构体
    p := person{"Tim", 20, 171.1, true}
    // 访问匿名成员并输出
    fmt.Printf("结构体的匿名成员string的值:%v\n", p.string)
    fmt.Printf("结构体的匿名成员int的值:%v\n", p.int)
    fmt.Printf("结构体的匿名成员float64的值:%v\n", p.float64)
    fmt.Printf("结构体的匿名成员bool的值:%v\n", p.bool)
}
结构体匿名成员的数据类型只能为字符串、整型、浮点型、复数或布尔型等基本数据类型,不能为数组、切片、集合或结构体等复合类型,否则程序会提示语法错误。

结构体实例化之后,由实例化变量访问匿名成员的数据类型即可操作,实现匿名成员的取值或赋值,上述代码运行结果为:

结构体的匿名成员string的值:Tim
结构体的匿名成员int的值:20
结构体的匿名成员float64的值:171.1
结构体的匿名成员bool的值:true

相关文章