在线文档  >   Golang练习   >   结构体

Go语言的结构体是一组带有类型的字段的集合。它们很有用,可以将数据分组记录。

package main

import "fmt"

// 这个 person 结构体类型具有 name 和 age 字段。
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)
}

运行结果如下:

$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51