有效Go if语句的说明

时间:2016-10-27 01:02:43

标签: go godoc

我正在通过effective go页面阅读,并且我来到了以下地方。

  

最后,Go没有逗号运算符,++和 - 语句不是   表达式。因此,如果您想在a中运行多个变量   应该使用并行分配(虽然这排除了++和 - )。

// Reverse a
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
    a[i], a[j] = a[j], a[i]
}

如果有人可以解释并分解这个for循环中发生的事情,那会很有帮助。

我理解i, j := 0声明了变量i和j,但是为什么有一个commar后跟len(a)-1。我不理解那部分以及条件中的其他部分。

谢谢:)

2 个答案:

答案 0 :(得分:3)

i的初始值为0,j的分配为len(a)-1。对于每次循环迭代,i将递增,j将递减1,同时从两端索引数组,并交换它们的值。

此示例使用Go的ability to assign the values of multiple expressions to multiple Lvalues

答案 1 :(得分:2)

@ nothingmuch的分析是正确的,但我根本不喜欢这个片段。我喜欢的一个功能是缺乏聪明的一个衬垫。我觉得如果再展开一点,整个片段就会更具可读性:

i := 0
j := len(a) - 1
for i < j {
    a[i], a[j] = a[j], a[i]
    i++
    j--
}