关键字 和 struct 用来定义结构体:

    简单示例:定义一个学生结构体

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. Age int
    5. Name string
    6. }
    7. func main() {
    8. stu := Student{
    9. Age: 18,
    10. Name: "name",
    11. }
    12. fmt.Println(stu)
    13. // 在赋值的时候,字段名可以忽略
    14. fmt.Println(Student{20, "new name"})
    15. return
    16. }
    1. type Student struct{
    2. Age int
    3. Name, Address string

    结构体中的字段如果是小写字母开头,那么其他 package 就无法直接使用该字段,例如:

    1. package pk1
    2. type Student struct{
    3. Age int
    4. name string
    5. }
    1. // 在另外一个包 pk2 中调用 Student 结构体
    2. package pk2
    3. func main(){
    4. stu := Student{}
    5. stu.Age = 18 //正确
    6. stu.name = "name" // 错误,因为`name` 字段为小写字母开头,不对外暴露
    7. }

    结构体中可以内嵌结构体

    结构体是可以比较的

    前提是结构体中的字段类型是可以比较的

    1. package main
    2. import "fmt"
    3. type Tree struct {
    4. value int
    5. left, right *Tree
    6. }
    7. func main() {
    8. tree1 := Tree{
    9. value: 2,
    10. }
    11. value: 1,
    12. }
    13. fmt.Printf(">>> %#v\n", tree1 == tree2)
    14. }

    结构体内嵌匿名成员

    1. package main
    2. import "fmt"
    3. type Person struct {
    4. Age int
    5. Name string
    6. }
    7. type Student struct {
    8. Person
    9. }
    10. func main() {
    11. per := Person{
    12. Age: 18,
    13. Name: "name",
    14. }
    15. stu := Student{Person: per}
    16. fmt.Println("stu.Age: ", stu.Age)