
Go中访问结构体字段需字段可导出(首字母大写),通过点号操作符读写;初始化支持零值、字面量(命名/位置)及new/&;读取时值类型得副本,指针自动解引用;修改要求变量可寻址,指针接收者方可修改原值。
在 Go 中访问结构体字段,核心就是通过点号(.)操作符,但前提是字段必须是**可导出的**(首字母大写),否则包外无法访问。初始化、读取和修改都依赖这一规则,且需注意指针接收与值接收的区别。
Go 中结构体字段初始化有多种方式,关键在于区分零值、字面量初始化和构造函数模式:
int→0,string→"",*T→nil)type User struct { Name string; Age int }
u := User{Name: "Alice", Age: 30} // 命名方式,清晰不易错
u2 := User{"Bob", 25} // 位置方式,要求顺序严格匹配uPtr := new(User) // 所有字段为零值,返回 *User
uPtr2 := &User{} // 效果相同
体字段只要字段可导出(首字母大写),就能用 .字段名 直接读取:
u.Name 返回字段副本(如 string 是值类型,读取不改变原结构体)uPtr.Name 会自动解引用(Go 支持语法糖,无需写 (*uPtr).Name)修改字段同样使用点号,但能否成功取决于变量是否**可寻址**(即能否取地址):
u.Age = 31
User{}.Age = 40 会报错 cannot assign to User{}.Age
实际开发中容易忽略的细节:
user.Profile.Address.City,每级字段都需可导出users[0])得到的是副本,直接修改不会影响原数据;应存为变量或使用指针切片([]*User)json.Unmarshal)要求字段可导出,否则字段保持零值