Go 切片语法:为什么 m["q1mi"] 的值为 [1,3,3]?
go 切片语法: 将 s[2:]... 的元素展开
在 go 编程中,切片是一个引用基础阵列的灵活数据结构。其语法允许开发者使用各种运算符来操作切片,其中之一就是 ... 展开运算符。
s[2:]... 的含义
s[2:]... 表示获得一个包含切片s 从索引2 开始到结束的所有元素的新切片。省略 : 后面的索引意味着获取所有剩余的元素。
为了说明... 展开运算符,请考虑以下示例:
func main() { q := []int{1, 2, 3, 4, 5, 6, 7, 8} s := []int{} // 获取 q 从索引 3 开始到结束的所有元素 c := append(s, q[3:]...) fmt.println(c) // [4 5 6 7 8] }
在以上示例中,q[3:]... 创建一个新的切片c,其中包含q数组中从索引3 开始到结束的所有元素。结果为 [4 5 6 7 8]。
为什么m["q1mi"] 为[1,3,3]
以下代码段:
type map map[string][]int m := make(map) s := []int{1, 2} s = append(s, 3) fmt.printf("%+v ", s) m["q1mi"] = s s = append(s[:1], s[2:]...) fmt.printf("%+v ", s) fmt.printf("%+v ", m["q1mi"])
产生以下输出:
[1,2,3] [1,3] [1,3,3]
在该示例中,map m 被初始化并赋予一个键-值对,其中键为"q1mi",值为切片s。然后,s 被更新为包含元素 [1,3]。
通过使用... 展开运算符,s 被更新为等效于append(s[:1], s[2:]...),这意味着将s 的第一个元素与从索引2 开始的所有元素附加到s 中。
因此,m["q1mi"] 被更新为反映 s 中的更改,最终值为 [1,3,3]。
以上就是Go 切片语法:为什么 m["q1mi"] 的值为 [1,3,3]?的详细内容,更多请关注其它相关文章!