来自数组或切片的多重赋值

在 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 并报告错误。


慕桂英4014372
浏览 166回答 2
2回答

泛舟湖上清波郎朗

正如您正确理解的那样,Go 不支持此类构造。IMO,他们永远不可能。Go 设计者更喜欢正交性是有充分理由的。例如,考虑分配:LHS 类型匹配 RHS 类型(在第一个近似值中)。LHS 中“家”的数量与 RHS 中“来源”(表达式)的数量相匹配。Python 不重视这些原则的方式可能在这里和那里都有些实用。但是当语言遵循简单的规则模式时,阅读大型代码库时的认知负担会降低。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go