18-struct

//  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)
}
上次修改: 10 January 2020