在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)创建 类型(或多或少)与原始类型完全不同。我是 不知道使用类型的简单/最佳实践方法 回避这一点的断言
- 彼得·鲍根
- 迈克尔·琼斯