go匿名字段

匿名字段

Golang匿名字段 :可以像字段成员那样访问匿名字段方法,编译器负责查找。

复制代码
package main

import "fmt"

type User struct {
    id   int
    name string
}

type Manager struct {
    User
}

func (self *User) ToString() string { // receiver = &(Manager.User)
    return fmt.Sprintf("User: %p, %v", self, self)
}

func main() {
    m := Manager{User{1, "Tom"}}
    fmt.Printf("Manager: %p\n", &m)
    fmt.Println(m.ToString())
}

输出结果:

复制代码
    Manager: 0xc42000a060
    User: 0xc42000a060, &{1 Tom}

通过匿名字段,可获得和继承类似的复用能力。依据编译器查找次序,只需在外层定义同名方法,就可以实现 "override"。

复制代码
package main

import "fmt"

type User struct {
    id   int
    name string
}

type Manager struct {
    User
    title string
}

func (self *User) ToString() string {
    return fmt.Sprintf("User: %p, %v", self, self)
}

func (self *Manager) ToString() string {
    return fmt.Sprintf("Manager: %p, %v", self, self)
}

func main() {
    m := Manager{User{1, "Tom"}, "Administrator"}

    fmt.Println(m.ToString())

    fmt.Println(m.User.ToString())
}

输出结果:

复制代码
    Manager: 0xc420074180, &{{1 Tom} Administrator}
    User: 0xc420074180, &{1 Tom}
相关推荐
ruxingli5 分钟前
Golang iota详解
开发语言·后端·golang
我材不敲代码6 分钟前
Python venv 虚拟环境从入门到精通 + uv 高性能替代工具实战指南
开发语言·python·uv
l1t17 分钟前
DeepSeek总结的使用实体-组件-系统和基于存在性处理进行Python编程18-20
开发语言·python
前端环境观察室20 分钟前
别只看 task success:AI Agent 浏览器自动化真正要补的是环境证据链
前端·后端
磊 子24 分钟前
STL之deque和list以及两者与vector的对比
开发语言·c++·list
凤山老林25 分钟前
DDD(领域驱动设计)在复杂业务系统中的落地指南
java·开发语言·数据库·ddd·领域驱动
浩风祭月26 分钟前
把 Docker 镜像从 2GB 瘦身到 180MB,AI 帮我找到了那些看不见的“脂肪”
后端·ai编程
凯瑟琳.奥古斯特36 分钟前
子查询原理与实战案例解析
开发语言·数据库·职场和发展·数据库开发
Eiceblue37 分钟前
Python 操作 Excel:数据分组、分类汇总与取消分组全解
开发语言·python·excel
山上三树39 分钟前
C/C++ 高频报错速查表(开发通用版)
c语言·开发语言·c++