// Go中的结构是字段的类型集合,它们可用于将数据分组在一起以形成记录 package main import "fmt" // person :结构体包含name和age两个字段 type person struct { name string age int } // NewPerson :根据给定的name创建一个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) }