Go struct
Go 语言中,也和 C 或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型 person 代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之
type person struct { name string age int }
- 一个 string 类型的字段 name,用来保存用户名称这个属性
- 一个 int 类型的字段 age, 用来保存用户年龄这个属性
package main import "fmt" type person struct { name string age int } func older (p1, p2 person) (person , int){ if p1.age > p2.age { return p1, p1.age-p2.age } return p2, p2.age-p1.age } func main() { // var P person // P.name = "Lisen" // P.age = 25 // P := person{"Tom", 25} // P := person{age:24, name:"Tom"} // fmt.Printf("The person's name is %s\n", P.name) var tom person paul := person{"Paul", 34} bob := person{age:25, name:"Bob"} tom.name, tom.age = "Tom", 18 tb_max, tb_diff := older(tom, bob) tp_max, tp_diff := older(tom, paul) bp_max, bp_diff := older(bob, paul) fmt.Printf("Of %s and %s, %s is older by %d years\n", tom.name, bob.name, tb_max.name, tb_diff) fmt.Printf("Of %s and %s, %s is older by %d years\n", tom.name, paul.name, tp_max.name, tp_diff) fmt.Printf("Of %s and %s, %s is older by %d years\n", bob.name, paul.name, bp_max.name, bp_diff) }
struct的匿名字段
我们上面介绍了如何定义一个struct,定义的时候是字段名与其类型一一对应,实际上Go支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌入字段。
当匿名字段是一个struct的时候,那么这个struct所拥有的全部字段都被隐式地引入了当前定义的这个struct。
让我们来看一个例子,让上面说的这些更具体化
package main import "fmt" type Skills []string type Human struct { name string age int weight int } type Student struct { Human Skills speciality string } func main() { mark := Student{Human:Human{"Jhone", 23, 112}, speciality:"Waist drum"} fmt.Println("His name is ", mark.name) fmt.Println("His age is ", mark.age) fmt.Println("His weight is ", mark.weight) fmt.Println("His speciality is ", mark.speciality) // 修改对应的备注信息 mark.Skills = []string{"anatomy"} mark.Skills = append(mark.Skills, "physics", "golang") fmt.Println("Her skills are ", mark.Skills) mark.speciality = "AI" fmt.Println("Jhone changed his speciality") fmt.Println("His speciality is ", mark.speciality) }

浙公网安备 33010602011771号