在golang的派生自定义类型中重用基类型的方法

在golang的派生自定义类型中重用基类型的方法,go,Go,我想在sort.IntSlice上创建一个ReverseSort方法。因此,我创建了一个自定义类型的MySlice,并在其中添加了ReverseSort方法 package main import ( "fmt" "sort" ) type MySlice sort.IntSlice func (ms MySlice) ReverseSort() { sort.Sort(sort.Reverse(ms)) } func main() { t2 := MySl

我想在
sort.IntSlice
上创建一个
ReverseSort
方法。因此,我创建了一个自定义类型的
MySlice
,并在其中添加了
ReverseSort
方法

package main

import (
    "fmt"
    "sort"
)

type MySlice sort.IntSlice

func (ms MySlice) ReverseSort() {
    sort.Sort(sort.Reverse(ms))
}
func main() {
    t2 := MySlice{5, 4, 3, 1}
    t2.ReverseSort()
    fmt.Println(t2)
}
但在运行这个程序时,错误显示为

cannot use ms (type MySlice) as type sort.Interface in argument to sort.Reverse:
        MySlice does not implement sort.Interface (missing Len method)

是否有一种方法可以实现此功能,而无需为自定义类型创建自己的
Len
Swap
Less
方法。

您可以在自定义类型中嵌入
sort.IntSlice

type MySlice struct {
    sort.IntSlice
}

func (ms MySlice) ReverseSort() {
    sort.Sort(sort.Reverse(ms))
}

func main() {
    t2 := MySlice{sort.IntSlice{5, 4, 3, 1}}
    t2.ReverseSort()
    fmt.Println(t2)
}
(开)

当然,这使得构建对象更加困难


讨论这一点:

按设计,“不能在非本地类型上定义新方法”

最佳实践是将非本地类型嵌入到您自己的类型中 本地类型,并对其进行扩展。类型别名(类型MyFoo-Foo)创建 类型(或多或少)与原始类型完全不同。我是 不知道使用类型的简单/最佳实践方法 回避这一点的断言

  • 彼得·鲍根
以及:

类型的方法在定义它的包中

这是一种逻辑连贯。这是一种美德。它被视为 大规模维护和多人参与的重要好处 发展项目

不过,你所说的力量并没有丧失,因为你可以嵌入 如上所述,在新类型中输入基类型,并添加所需的任何内容 对它来说,在某种功能上“是一个”你所寻求的,只有 请注意,新类型必须具有新名称及其所有字段 方法必须在它的新包中

  • 迈克尔·琼斯

您可以在自定义类型中嵌入
sort.IntSlice

type MySlice struct {
    sort.IntSlice
}

func (ms MySlice) ReverseSort() {
    sort.Sort(sort.Reverse(ms))
}

func main() {
    t2 := MySlice{sort.IntSlice{5, 4, 3, 1}}
    t2.ReverseSort()
    fmt.Println(t2)
}
(开)

当然,这使得构建对象更加困难


讨论这一点:

按设计,“不能在非本地类型上定义新方法”

最佳实践是将非本地类型嵌入到您自己的类型中 本地类型,并对其进行扩展。类型别名(类型MyFoo-Foo)创建 类型(或多或少)与原始类型完全不同。我是 不知道使用类型的简单/最佳实践方法 回避这一点的断言

  • 彼得·鲍根
以及:

类型的方法在定义它的包中

这是一种逻辑连贯。这是一种美德。它被视为 大规模维护和多人参与的重要好处 发展项目

不过,你所说的力量并没有丧失,因为你可以嵌入 如上所述,在新类型中输入基类型,并添加所需的任何内容 对它来说,在某种功能上“是一个”你所寻求的,只有 请注意,新类型必须具有新名称及其所有字段 方法必须在它的新包中

  • 迈克尔·琼斯