go - 数组或 slice 的多重赋值

标签 go

在 Go 中是否可以像在 Python 中那样将数组解包为多个变量。

例如

var arr [4]string = [4]string {"X", "Y", "Z", "W"}
x, y, z, w := arr

我发现这在 Go 中不受支持。我可以做些什么来避免编写 x,y,z,w=arr[0],arr[1],arr[2],arr[3]

此外,是否有可能支持类似的东西

var arr []string = [4]string {"X", "Y", "Z", "W"}
x, y, z, w := arr

请注意,它现在是一个 slice 而不是数组,因此编译器将隐式检查是否 len(arr)==4 并在不是时报告错误。

最佳答案

如您所见,Go 不支持此类结构。 IMO,他们永远不可能。 Go 设计师出于充分的理由更喜欢正交性。例如,考虑作业:

  • LHS 类型与 RHS 类型匹配(在第一个近似值中)。
  • LHS 中“home”的数量与 RHS 中“sources”(表达式)的数量相匹配。

Python 不重视这些原则的方式可能在某些地方有点实用。但是,当语言遵循简单、规则的模式时,阅读大型代码库时的认知负担会降低。

关于go - 数组或 slice 的多重赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17934611/

相关文章:

mongodb - bson 方案的 Virtuals 属性

go - 创建补丁以添加 kubernetes 注释

database - 如何从 Go 中的多个表构造对象

golang 二进制文件不在 mips 上运行

go - 如何使 LiteIDE 为 *big.Int(或您的类型)显示用户友好的监视字符串?

go - 如何使用反射来设置嵌套的结构域值

正则表达式在 Go 中不匹配

html - Go Lang - 在目录结构中的什么地方放置用于 HTML 模板的图像?

go - 将数据添加到map [string] interface {}

Goroutines 选择范围循环