首页 > 解决方案 > 如何通过扩展类型向 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 。

标签: gotypesextension-methods

解决方案


我想有效地拥有在所有方面都表现为 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))
}

推荐阅读