go - 如何通过扩展类型向 int 等基本类型添加功能?
问题描述
我希望能够将方法添加到现有类型,例如 int:
func (i *int) myfunction {
...
}
但是,这显然会产生错误。
无法在非本地类型上定义新方法
谷歌排名靠前的结果是一个针对 golang的github 问题。有希望的是,答案是您已经可以通过另一种方式获得此功能,因此他们不会对语言进行此更改。
无济于事,反应模糊
type extended Existing
并且它没有明确显示如何实现 OP 的要求,即:
func (a int) sum(b int) (total int) {
total = a + b
return
}
那么,如何扩展一个 int 来添加功能呢?它仍然可以像 int 一样使用吗?如果是这样,怎么做?
我想有效地拥有在所有方面都表现为 int 的东西,但还有其他方法。我希望能够通过某种方式以各种方式使用它来代替 int 。
解决方案
我想有效地拥有在所有方面都表现为 int 的东西,但还有其他方法。我希望能够通过某种方式以各种方式使用它来代替 int 。
目前这在 Go 中是不可能的,因为它不支持任何类型的泛型。
您可以达到的最佳效果如下所示:
package main
type Integer int
func (i Integer) Add(x Integer) Integer {
return Integer(int(i) + int(x))
}
func AddInt(x, y int) int {
return x + y
}
func main() {
x := Integer(1)
y := Integer(2)
z := 3
x.Add(y)
x.Add(Integer(z))
x.Add(Integer(9))
# But this will not compile
x.Add(3)
# You can convert back to int
AddInt(int(x), int(y))
}
推荐阅读
- javascript - JavaScript 在实际定义时返回 undefined
- amazon-web-services - 使用“jhipster aws”部署 jhipster 应用程序时连接到 EC2 实例
- c++ - 将任意大小的大 Base-10 数读入位集中
- python - pandas groupby 使用字典值,应用 sum
- c# - 在 ASP.NET Core 2.1 中使用基于策略的授权检查其他权限
- android - 带有滚动视图的片段大小
- postscript - ghostscript hp8600 OfficeJet Pro
- vba - 将列转换为单列
- python - 在python中获取1到100万之间随机数的最快方法
- angular - 角度 httpClient 中的捕获错误仍然记录 401