在Go语言中,嵌入第三方类型是一种强大的功能,可以让我们在不修改原有代码的情况下扩展和定制已有的类型。通过嵌入第三方类型,我们可以继承其方法和属性,实现代码的复用和扩展。本文将为您介绍如何在Go语言中嵌入第三方类型,并给出一些实际应用场景的示例。无论您是Go语言的初学者还是有一定经验的开发者,相信本文都能为您提供实用的指导。
问题内容
在我的应用程序中,使用了 decimal 包 github.com/shopspring/decimal。
为了在 decimal.decimal
类型上编写自定义函数,我创建了自己的 decimal
类型并嵌入了 decimal.decimal
:
type decimal struct { decimal.decimal }
这很好用,我现在可以访问 decimal
对象上的方法:
a := decimal{decimal.newfromfloat(1.0)} b := decimal{a.neg()}
某些 decimal.decimal
方法需要 decimal.decimal
, f.ex 类型的参数:
c := decimal{a.add(b)}
上面的行由于错误而无法编译:cannot use b (decimal类型的变量)作为十进制。a.add
参数中的十进制值
我尝试将 decimal
转换为 decimal.decimal
转换为 decimal.decimal
:
c := decimal{a.add((decimal.decimal)(b))}
由于以下错误,上述代码无法编译:
cannot convert b (variable of type Decimal) to decimal.Decimal
问题:如何以允许使用“父”方法的方式扩展/嵌入第三方类型并且可以使用扩展类型作为方法中的参数这需要父母类型的论证吗?
解决方法
使用类型声明但没有显式字段名称的字段称为嵌入字段。嵌入字段必须指定为类型名称 t 或指向非接口类型名称 *t 的指针,并且 t 本身可能不是指针类型。 非限定类型名称充当字段名称。
因此,一个快速而肮脏的解决方案是简单地使用“非限定类型名称”访问该字段。
_ = decimal{a.add(b.decimal)}
但是,如果您在使用新类型时寻求更无缝的体验,那么您唯一的选择就是重新声明需要原始类型的方法并在其位置使用新类型。这些重新声明的方法只需是将一个实例的嵌入字段传递给另一实例的嵌入字段的方法的简单包装器。例如:
type Time struct { time.Time } func (t Time) In(loc *time.Location) Time { return Time{t.Time.In(loc)} } func (t Time) Equal(u Time) bool { return t.Time.Equal(u.Time) }
以上是如何在 Go 中嵌入第三方类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

go语言叫go的原因:想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物,它的中文名叫做囊地鼠,它们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

是,TiDB采用go语言编写。TiDB是一个分布式NewSQL数据库;它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性。TiDB架构中的PD储存了集群的元信息,如key在哪个TiKV节点;PD还负责集群的负载均衡以及数据分片等。PD通过内嵌etcd来支持数据分布和容错;PD采用go语言编写。

go语言需要编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言,也就说Go语言程序在运行之前需要通过编译器生成二进制机器码(二进制的可执行文件),随后二进制文件才能在目标机器上运行。

go语言能编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言。对Go语言程序进行编译的命令有两种:1、“go build”命令,可以将Go语言程序代码编译成二进制的可执行文件,但该二进制文件需要手动运行;2、“go run”命令,会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件。

删除map元素的两种方法:1、使用delete()函数从map中删除指定键值对,语法“delete(map, 键名)”;2、重新创建一个新的map对象,可以清空map中的所有元素,语法“var mapname map[keytype]valuetype”。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

WebStorm Mac版
好用的JavaScript开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Atom编辑器mac版下载
最流行的的开源编辑器