gpt4 book ai didi

go - 在Golang中封装 `sort`接口(interface)

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:14 24 4
gpt4 key购买 nike

我正在尝试对 Go 中的一片结构进行排序。我可以通过在包的顶层定义 3 个方法来实现 sort.Interface:

type byName []*Foo // struct Foo is defined in another package

func (a byName) Len() int { return len(a) }
func (a byName) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a byName) Less(i, j int) bool { return a[i].Name < a[j].Name }

func Bar() {
var foos []*Foo // Populated by a call to an outside function

sort.Sort(byName(foos))
...
}

有什么方法可以将 3 个方法定义(LenSwapLess)移动到 Bar 函数,在 Go 中定义一个匿名方法?

// Something like this
func Bar() {
...
Len := func (a byName)() int { return len(a) }
}

顶层定义的 3 个方法可以从这个包外部访问吗?我猜不是,因为类型 byName 是本地的。

最佳答案

简单的回答,不,Go 中没有匿名方法这样的东西。

由于无法使用接收器声明匿名函数,因此它们实际上不是方法,因此 byName 类型不会实现所需的 sort.Interface

关于go - 在Golang中封装 `sort`接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36608557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com