packagemainimport"fmt"typeStudentstruct { Age int Name string}funcmain() { stu :=Student{ Age: 18, Name: "name", } fmt.Println(stu)// 在赋值的时候,字段名可以忽略 fmt.Println(Student{20, "new name"})return}
通常结构体中一个字段占一行,但是类型相同的字段,也可以放在同一行,例如:
typeStudentstruct{ Age int Name, Address string}
一个结构体中的字段名是唯一的,例如一下代码,出现了两个 Name 字段,是错误的:
typeStudentstruct{ Name string Name string}
结构体中的字段如果是小写字母开头,那么其他 package 就无法直接使用该字段,例如:
// 在包 pk1 中定义 Student 结构体packagepk1typeStudentstruct{ Age int name string}
packagemainimport"fmt"typeTreestruct { value int left, right *Tree}funcmain() { tree :=Tree{ value: 1, left: &Tree{ value: 1, left: nil, right: nil, }, right: &Tree{ value: 2, left: nil, right: nil, }, } fmt.Printf(">>> %#v\n", tree)}
结构体是可以比较的
前提是结构体中的字段类型是可以比较的
packagemainimport"fmt"typeTreestruct { value int left, right *Tree}funcmain() { tree1 :=Tree{ value: 2, } tree2 :=Tree{ value: 1, } fmt.Printf(">>> %#v\n", tree1 == tree2)}
结构体内嵌匿名成员
声明一个成员对应的数据类型而不指名成员的名字;这类成员就叫匿名成员
packagemainimport"fmt"typePersonstruct { Age int Name string}typeStudentstruct {Person}funcmain() { per :=Person{ Age: 18, Name: "name", } stu :=Student{Person: per} fmt.Println("stu.Age: ", stu.Age) fmt.Println("stu.Name: ", stu.Name)}