http://play.golang.org/p/W70J4GU7nA

  s := []int{5, 2, 6, 3, 1, 4}
  sort.Reverse(sort.IntSlice(s))
  fmt.Println(s)
  // 5, 2, 6, 3, 1, 4

很难理解函数反转(数据接口)接口是什么意思.

如何反转数组?我不需要分类.

推荐答案

通常,要对整数数组进行排序,需要将它们包装在IntSlice中,IntSlice定义了方法LenLessSwap.sort.Sort依次使用这些方法.sort.Reverse所做的是,它采用了一个定义LenLessSwap的现有类型,但它用一个始终与底层Less相反的新方法替换了Less方法:

type reverse struct {
    // This embedded Interface permits Reverse to use the methods of
    // another Interface implementation.
    Interface
}

// Less returns the opposite of the embedded implementation's Less method.
func (r reverse) Less(i, j int) bool {
    return r.Interface.Less(j, i)
}

// Reverse returns the reverse order for data.
func Reverse(data Interface) Interface {
    return &reverse{data}
}

所以当你写sort.Reverse(sort.IntSlice(s))的时候,你得到的是这个新的,"修改的"IntSlice,它的Less方法被替换了.因此,如果您对其调用sort.Sort,它将调用Less,它将按降序排序.

Go相关问答推荐

如何禁用Go SRC包中的VSCode警告?

Go - os.userHomeDir()在WSL上返回C:\Users\

Go Fiber和HTMX—HX—Trigger header被更改为HX—Trigger,这不是HTMX监听的内容

为什么工具链指令在这种情况下没有效果?

这是go语言gin提供的关于TypeEngine和RouterGroup的问题

无效操作:v > max(类型参数 T 与 > 不可比较)

使用Dockertest进行Golang SQL单元测试的基本设置

如何在 Go 服务中导入 monorepo 中的包?

如何用mpb创建两行进度条?

当我的 go build 成功时,如何修复我的 docker build 失败? Dockerfile 包括 go mod 下载

如何在 gocql 中设置最大池大小?

致命错误 - 所有 Goroutines 都睡着了!僵局

Golang:如何判断通过缓冲通道进行通信时生产者或消费者是否较慢?

为超时的单元测试创​​建 deadlineExceededError:true

如何根据 Go 中第二次出现的分隔符拆分字符串?

Golang并发写入多个文件

为什么 Go 被认为是部分抢占式的?

使用 bolthold 3 条件进行 boltDB 查询

将 Simple Go Web 应用程序部署到 Elastic Beanstalk

函数的递归调用以 goroutine 和惯用方式开始,以在所有工作 goroutine 完成时继续调用者