📜  Golang 中的结构(1)

📅  最后修改于: 2023-12-03 15:01:02.195000             🧑  作者: Mango

Golang 中的结构

在 Go 语言中,结构(Struct)是一种用户自定义的数据类型,它可以包含不同的属性(也称为字段),这些属性可以是基本数据类型、数组、结构等等。本文将为您介绍 Golang 中的结构体定义、实例化、匿名结构体、嵌套结构体等相关知识点。

结构体的定义

在 Golang 中,使用 type 关键字来定义结构体,具体语法如下:

type structName struct {
    field1 datatype1
    field2 datatype2
    ...
}

其中,structName 表示结构体的名称,field 表示结构体的属性名称,datatype 表示属性的数据类型。例如,下面定义了一个名为 Person 的结构体,包含了名字和年龄两个属性:

type Person struct {
    name string
    age  int
}
结构体的实例化

结构体定义好之后,需要实例化才能使用。实例化结构体的方式有多种,最常见的是使用 new 关键字或花括号 {},下面分别介绍。

使用 new 关键字实例化结构体

使用 new 关键字可以创建一个结构体实例,并返回该结构体实例的指针。例如,创建一个名为 p 的 Person 结构体实例,可以使用下面的语句:

p := new(Person)

这样创建出来的 p 是一个指向 Person 类型的指针,它指向的存储区域已经被分配,但是其中的字段都是默认值:

fmt.Printf("%+v", p) // 输出:&{name: age:0}
使用花括号实例化结构体

花括号实例化结构体是将结构体中的属性值直接写入花括号中,创建一个结构体实例。例如,使用花括号创建一个名为 p2 的 Person 结构体实例,可以使用下面的语句:

p2 := Person{name: "Alice", age: 18}

这样创建出来的 p2 中的 name 属性为 Alice,age 属性为 18:

fmt.Printf("%+v", p2) // 输出:{name:Alice age:18}
匿名结构体

当我们只需要使用一次的结构体时,可以使用匿名结构体。匿名结构体是没有名字的结构体,它的类型只能在当前代码块中被使用。例如,下面的语句创建了一个匿名结构体,并直接输出其中的字段:

fmt.Printf("%+v", struct{ name string; age int }{name: "Bob", age: 20}) // 输出:{name:Bob age:20}

这里定义了一个包含 name 和 age 两个字段的匿名结构体,并且直接在花括号中初始化了它们的值。

嵌套结构体

可以在结构体中嵌套其他结构体,这样就可以实现更复杂的数据结构。例如,下面的代码定义了一个名为 Teacher 的结构体,它包含了一个名为 Person 的结构体,以及一个 subject 字段。

type Teacher struct {
    p       Person
    subject string
}

这样可以使用点号(.)来访问 Teacher 结构体中的 Person 结构体中的属性,例如:

t := Teacher{p: Person{name: "Caroline", age: 30}, subject: "Math"}
fmt.Println(t.p.name) // 输出:Caroline
结论

本文介绍了 Golang 中结构体的定义、实例化、匿名结构体、嵌套结构体等相关知识点。结构体在 Golang 中是非常重要的数据类型,能够实现存储复杂数据的目的。