go方法集

方法集

Golang方法集 :每个类型都有与之关联的方法集,这会影响到接口实现规则。

    • 类型 T 方法集包含全部 receiver T 方法。• 类型 *T 方法集包含全部 receiver T + *T 方法。• 如类型 S 包含匿名字段 T,则 S 和 *S 方法集包含 T 方法。 • 如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 T + *T 方法。 • 不管嵌入 T 或 *T,*S 方法集总是包含 T + *T 方法。

用实例 value 和 pointer 调用方法 (含匿名字段) 不受方法集约束,编译器总是查找全部方法,并自动转换 receiver 实参。

Go 语言中内部类型方法集提升的规则:

类型 T 方法集包含全部 receiver T 方法。

package mainimport ("fmt"
)type T struct {int
}func (t T) test() {fmt.Println("类型 T 方法集包含全部 receiver T 方法。")
}func main() {t1 := T{1}fmt.Printf("t1 is : %v\n", t1)t1.test()
}

输出结果:

    t1 is : {1}类型 T 方法集包含全部 receiver T 方法。

类型 *T 方法集包含全部 receiver T + *T 方法。

package mainimport ("fmt"
)type T struct {int
}func (t T) testT() {fmt.Println("类型 *T 方法集包含全部 receiver T 方法。")
}func (t *T) testP() {fmt.Println("类型 *T 方法集包含全部 receiver *T 方法。")
}func main() {t1 := T{1}t2 := &t1fmt.Printf("t2 is : %v\n", t2)t2.testT()t2.testP()
}

输出结果:

    t2 is : &{1}类型 *T 方法集包含全部 receiver T 方法。类型 *T 方法集包含全部 receiver *T 方法。

给定一个结构体类型 S 和一个命名为 T 的类型,方法提升像下面规定的这样被包含在结构体方法集中:

如类型 S 包含匿名字段 T,则 S 和 *S 方法集包含 T 方法。

这条规则说的是当我们嵌入一个类型,嵌入类型的接受者为值类型的方法将被提升,可以被外部类型的值和指针调用。

package mainimport ("fmt"
)type S struct {T
}type T struct {int
}func (t T) testT() {fmt.Println("如类型 S 包含匿名字段 T,则 S 和 *S 方法集包含 T 方法。")
}func main() {s1 := S{T{1}}s2 := &s1fmt.Printf("s1 is : %v\n", s1)s1.testT()fmt.Printf("s2 is : %v\n", s2)s2.testT()
}

输出结果:

    s1 is : {{1}}如类型 S 包含匿名字段 T,则 S 和 *S 方法集包含 T 方法。s2 is : &{{1}}如类型 S 包含匿名字段 T,则 S 和 *S 方法集包含 T 方法。

如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 T + *T 方法。

这条规则说的是当我们嵌入一个类型的指针,嵌入类型的接受者为值类型或指针类型的方法将被提升,可以被外部类型的值或者指针调用。

package mainimport ("fmt"
)type S struct {T
}type T struct {int
}func (t T) testT() {fmt.Println("如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 T 方法")
}
func (t *T) testP() {fmt.Println("如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 *T 方法")
}func main() {s1 := S{T{1}}s2 := &s1fmt.Printf("s1 is : %v\n", s1)s1.testT()s1.testP()fmt.Printf("s2 is : %v\n", s2)s2.testT()s2.testP()
}

输出结果:

    s1 is : {{1}}如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 T 方法如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 *T 方法s2 is : &{{1}}如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 T 方法如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 *T 方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提升工作效率的秘密武器

🌟工作小能手们,你们是否还在为日复一日的办公琐事感到头疼?别急,今天我就为大家种草几款鲜为人知但超级实用的工作软件,让你的工作效率飞起来!🌈 1️⃣《亿可达》 🖥️ 它是一款自…

Windows系统本地部署DrawDB数据库设计工具并实现无公网IP远程访问

文章目录 1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 开发中很多时候都会使用到数据库,所以选择一个好用的数据库设计工具会让工作效率翻倍。在当今数字化时代,数据库管理是许多企业和个人项目的核心。设…

Day2:调节屏幕驱动

Day2调节屏幕驱动 原理图: 要想调节屏幕驱动

双亲委派模型如何确保类加载的顺序

双亲委派模型确保类加载的顺序主要通过以下步骤: 1、当前类加载器检查: 当一个类加载器(我们称之为当前类加载器)收到类加载请求时,它首先会检查该类是否已经被自己加载过。如果已经加载过,则直接返回已加…

全球10KM土地利用程度数据

全球10KM土地利用程度数据 数据介绍 “一带一路”监测区域土地利用程度指数平均值为0.34,不同区域利用程度差异明显,但总体上高值区域与人口分布的稠密区域吻合。中南半岛、南亚、欧洲和小亚细亚半岛等地海拔较低,水热组合条件较好&#xff…

服务器直连电脑(盒子直连电脑)电脑需要设置为固定ip才能访问盒子

文章目录 现象盒子设置为固定ip,pc设置成固定ip(以太网网卡,realtak那个,不是tap-windows那个,tap-windows不用管),在pc上用ip搜索工具搜索,可以搜到盒子ip。盒子设置为固定ip&#…

ESrally单机向量检索性能测试全流程

ESrally单机向量检索性能测试全流程 测试方案的尝试 准备测试 ES 的向量检索性能,Vespa 方案由于下载依赖库存在网络问题无法执行成功,终止;开源工具 ann-benchamrk 是一个用于评估近似最近邻(ANN)搜索库的性能测试工具,这个本是最佳选择,但是也由于需要 pip 安装几十…

Metes and Bounds Pro for Mac 激活版:精准数据转换与绘图利器

Metes and Bounds Pro for Mac是一款专为土地测量和边界划定而设计的专业软件,为Mac用户提供了高效、精确的测量工具。其核心功能在于其全面的测量工具和简便的操作流程,能够满足在土地管理、房地产开发、农业规划等领域的多样化需求。 这款软件集合了距…

探索绘图神器draw.io:打造高效、灵活的图形设计新体验

探索绘图神器draw.io:打造高效、灵活的图形设计新体验 一、引言 在数字化时代,图形设计已经成为众多行业不可或缺的一部分。然而,对于非专业的图形设计师来说,如何快速、高效地完成图形设计任务,一直是一个挑战。今天…

基于docker安装flink

文章目录 环境准备Flinkdocker-compose方式二进制部署 KafkaMysql Flink 执行 SQL命令进入SQL客户端CLI执行SQL查询表格模式变更日志模式Tableau模式窗口计算 窗口计算滚动窗口demo滑动窗口 踩坑 环境准备 Flink docker-compose方式 version: "3" services:jobman…

媲美Suno、Udio!AI铁了心,要砸音乐人的饭碗

5月10日凌晨,著名语音生成式AI平台ElevenLabs在社交平台宣布,推出文本生成歌曲产品ElevenLabs Music。 从其展示的效果来看,音乐的节奏感、和声、乐器的搭配、情感表达、创意性、风格的多样性、高/低音,可媲美该领域的两款头部产…

c++ 查看线程状态

在C标准库中,std::thread类并没有直接提供查询线程状态的方法。std::thread类提供了创建线程、等待线程结束(join())或分离线程(detach())的接口,但并没有提供一个函数来检查线程是否仍在运行、是否阻塞、是…

618精选好物推荐,五款品质与性价比并存的选择!

在繁忙的生活中,我们总是渴望找到那些能够提升生活品质的好物,让每一天都过得更加精彩。而618购物节,无疑是寻找这些好物的绝佳时机。在这个盛大的购物狂欢中,我们为大家精选了五款品质与性价比并存的选择,让大家在享受…

『大模型笔记』Google CEO Sundar Pichai(桑达尔·皮查伊)谈人工智能的未来!

Google CEO Sundar Pichai(桑达尔皮查伊)谈人工智能的未来! 文章目录 一. Google CEO谈人工智能的未来总结摘要观点时间线二. 参考文献中文字幕视频链接,欢迎关注我的xhs账号:Google CEO 皮查伊谈人工智能的未来! 一. Google CEO谈人工智能的未来

【C++】n个一位数能够组成的最大数

文章目录 题目题目描述输入输出样例输入样例输出 思路AC代码 题目 题目描述 请问n个一位数能够组成的最大的整数是多少。 比如, n 3 n3 n3,3个整数为 1 、 3 、 9 1、3、9 1、3、9,那么组成的最大整数是 931 931 931。 比如, n…

补充RequestAttribute通用工具类

补充https://blog.csdn.net/qq_37148232/article/details/138303873?spm1001.2014.3001.5501 通用工具类&#xff1a; SuppressWarnings("ALL") public class Share {public static <T> void set(String key, T value) {HttpServletRequest request ZYReque…

【Mysql】——收银查询与退货

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

Java并发编程:Kilim协程框架

文章目录 一、介绍1、Kilim协程框架解析2、Kilim协程框架应用 一、介绍 Kilim是一个专为Java设计的轻量级协程框架&#xff0c;它通过字节码操纵技术实现了轻量级的协程&#xff0c;为Java开发者提供了更为灵活的并发编程选项。以下是关于Kilim协程框架的解析与应用&#xff1…

struct和union大小计算规则

Union 一&#xff1a;联合类型的定义 联合也是一种特殊的自定义类型&#xff0c;这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff08;所以联合也叫共用体&#xff09; 比如&#xff1a;共用了 i 这个较大的空间 二&#xff1a; 联合的…

【程序员侠】李飞往事之wifi恶魔

程序员侠李飞是一名技术高超的年轻程序员&#xff0c;他在城市中打击各种网络犯罪活动&#xff0c;保护市民的网络安全。一天&#xff0c;他接到了一个任务&#xff0c;说是城市中有一个邪恶的wifi恶魔正在肆虐&#xff0c;许多人的个人信息被盗取&#xff0c;银行账户被盗刷&a…