Go 示例: 结构体

Go 的结构体是类型化的字段集合。它们对于将数据分组以形成记录很有用。

package main
import "fmt"

person 结构体类型具有 nameage 字段。

type person struct {
    name string
    age  int
}

newPerson 使用给定的名称构造一个新的 person 结构体。

func newPerson(name string) *person {

您可以安全地返回指向局部变量的指针,因为局部变量将在函数的作用域内生存。

    p := person{name: name}
    p.age = 42
    return &p
}
func main() {

此语法创建一个新的结构体。

    fmt.Println(person{"Bob", 20})

您可以在初始化结构体时命名字段。

    fmt.Println(person{name: "Alice", age: 30})

省略的字段将为零值。

    fmt.Println(person{name: "Fred"})

& 前缀会生成指向结构体的指针。

    fmt.Println(&person{name: "Ann", age: 40})

将新的结构体创建封装在构造函数中是惯用的

    fmt.Println(newPerson("Jon"))

使用点访问结构体字段。

    s := person{name: "Sean", age: 50}
    fmt.Println(s.name)

您也可以将点与结构体指针一起使用 - 指针会自动解引用。

    sp := &s
    fmt.Println(sp.age)

结构体是可变的。

    sp.age = 51
    fmt.Println(sp.age)

如果结构体类型仅用于单个值,我们不必为它命名。该值可以具有匿名结构体类型。此技术通常用于 表驱动测试

    dog := struct {
        name   string
        isGood bool
    }{
        "Rex",
        true,
    }
    fmt.Println(dog)
}
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51
{Rex true}

下一个示例:方法.