带有函数调用的无限循环

时间:2017-08-01 18:31:41

标签: go

循环循环,当我通过函数递增i时,但不通过i++递增循环。

package main

import "fmt"

func increment(i int) (int) {
    i++
    return i
}

func condition_true(i int) (bool) {
    if i < 10 {
        return true
    } else {
        return false
    }
}

func main() {
    for i := 1; condition_true(i); increment(i) {
        fmt.Println(i)
    }
}

compiler to play around

2 个答案:

答案 0 :(得分:6)

你应该i = increment(i)

否则,循环中使用的i不会被修改。

for i := 1; condition_true(i); i = increment(i) {
    fmt.Println(i)
}

那个像你期望的那样有效。

https://play.golang.org/p/dwHbV1iY0_

或者,允许increment通过接收指向它的指针来修改i

func increment(i *int) {
   *i++
}

然后在循环中使用它:

for i := 1; condition_true(i); increment(&i) {
    fmt.Println(i)
}

答案 1 :(得分:3)

这是因为增量函数实际上并没有改变i值,因为i是通过值传递给函数的。

只需删除for循环中的增量并将其替换为i ++