Z
ZHANK
方法与接口

结构体 struct

struct 定义/初始化、字段访问、结构体字面量、嵌套/匿名结构体

结构体 struct

Go 没有 class——用 struct 组合数据,用方法(receiver function)定义行为。

学完本章你将: 掌握 struct 定义/初始化、字段访问、嵌入、匿名结构体。


定义与初始化

go
package main

import "fmt"

type Person struct {
    Name string
    Age  int
    City string
}

func main() {
    // 多种初始化方式
    p1 := Person{"小明", 25, "北京"}              // 按顺序
    p2 := Person{Name: "小红", Age: 22}          // 命名(City 为零值)
    p3 := Person{}                                // 全零值

    // 访问
    fmt.Println(p1.Name)
    p1.Age = 26
}

结构体嵌入(组合代替继承)

go
type Address struct {
    City    string
    ZipCode string
}

type User struct {
    Name    string
    Address            // 嵌入——不是继承!
}

func main() {
    u := User{
        Name: "小明",
        Address: Address{City: "北京", ZipCode: "100000"},
    }

    // 提升字段——直接访问
    fmt.Println(u.City)     // "北京"(不是 u.Address.City)
    fmt.Println(u.ZipCode)  // "100000"
}

💡 Go 用组合代替继承——嵌入 struct 后,外层可以直接访问内层的字段和方法。


匿名结构体

go
// 临时使用,不用定义类型
user := struct {
    Name string
    Age  int
}{"小明", 25}

fmt.Println(user.Name)