在 Go 中是否有可能将数组解包为多个变量,就像在 Python 中一样。
例如
var arr [4]string = [4]string {"X", "Y", "Z", "W"}
x, y, z, w := arr
Run Code Online (Sandbox Code Playgroud)
我发现这在 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
Run Code Online (Sandbox Code Playgroud)
请注意,它现在是一个切片而不是数组,因此编译器将隐式检查 len(arr)==4 并报告错误。
正如您已经正确地理解的那样,Go 不支持此类构造。IMO,他们不太可能成为这样的人。Go 设计者更喜欢正交性是有充分理由的。例如,考虑分配:
Python 不重视这些原则的方式可能在某些地方有些实用。但是,当语言遵循简单、规则的模式时,阅读大型代码库时的认知负荷会较低。
小智 5
这可能不是您想要的,但它确实提供了类似的结果:
package main
func unpack(src []string, dst ...*string) {
for ind, val := range dst {
*val = src[ind]
}
}
func main() {
var (
a = []string{"X", "Y", "Z", "W"}
x, y, z, w string
)
unpack(a, &x, &y, &z, &w)
println(x, y, z, w)
}
Run Code Online (Sandbox Code Playgroud)