我try 将以下Python代码转换为Go

import random

list = [i for i in range(1, 25)]
random.shuffle(list)
print(list)

但我发现我的Go版本冗长而笨拙,因为它没有Shuffle函数,而且我必须实现接口和转换类型.

我的代码的惯用Go版本是什么?

推荐答案

由于您的列表只是1到25之间的整数,因此可以使用Perm:

list := rand.Perm(25)
for i, _ := range list {
    list[i]++
}

请注意,使用rand.Perm给出的排列是混洗任何数组的有效方法.

dest := make([]int, len(src))
perm := rand.Perm(len(src))
for i, v := range perm {
    dest[v] = src[i]
}

Go相关问答推荐

区分Terminal和Hook Zerolog Go中的错误级别日志(log)输出

macOS上GoLand 2023.3.4中的代码导航

如何给杜松子wine 的路由加上一个名字,比如Laravel ?

在GO中创建[]字符串类型的变量

Go SQLCMD比Windows本机版本慢吗?

我可以在Golang中的另一个类型参数的基础上约束一个类型的参数吗?

有没有办法让sqlc生成可以使用pgxpool的代码

如何根据地址和大小打印字符串

使用 Go Colly 抓取所有可能的标签并将它们放入一个变量中

具有两个参数的动态规划:天数和优惠券

如何使用泛型将接口转换为指定类型

在 Go 中发送 ack 和 term 后消息仍在 nats 限制队列中

切片到数组指针的转换

Golang SSH客户端错误无法验证,try 的方法[无公钥],没有支持的方法

Go:用于 XML 解码的嵌套 struct 中的提升字段

正确编码 JWT

go mod tidy 错误消息:但是 go 1.16 会 Select

如何在 Go 中使用 Pact 返回错误请求(400、500)?

泛型:对具有返回自身的函数的类型的约束

如何使用 httputil.ReverseProxy 设置 X-Forwarded-For