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
注意它现在是一个切片而不是数组,因此编译器将隐式检查len(arr)== 4是否报告错误。
答案 0 :(得分:3)
正如您所知,Go不支持此类构造。国际海事组织,它们不可能永远存在。设计师喜欢正交性有充分的理由。例如,考虑分配:
不重视这些原则的Python方式在这里和那里可能有点实用。但是,当语言遵循简单,规则的模式时,阅读大型代码库时的认知负荷较低。
答案 1 :(得分:0)
这可能不是您的想法,但它确实提供了类似的结果:
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)
}