{}和i = 0之间的差异;去了我+ ++ {}

时间:2015-12-23 09:58:25

标签: go

我目前正在学习Go。我正在读这本书编程入门

我在并发部分并形成我所理解的,我可以看到两种方式来定义一个无限循环的go程序。

func pinger(c chan string) {
    for i := 0; ; i++ {
        c <- "ping" 
    }
}

func printer(c chan string) {
   for {
       msg := <- c
       fmt.Println(msg)
       time.Sleep(time.Second * 1)
   }
}

我想知道在pinger函数中i变量的用途是什么。什么是最好的&#34;去&#34;声明无限循环的方法?我会说打印机功能中的那个更好但是我是新手,我可能会错过pinger功能中的声明。

感谢所有愿意帮助的人。

2 个答案:

答案 0 :(得分:4)

第一个循环中的i是多余的;最好除去未使用的变量,因此你也应该在pinger()函数中使用for{}

这是一个有效的例子:

package main

import(
 "time"
 "fmt"
)

func main() {
    c := make(chan string)
    go printer(c)
    go pinger(c)
    time.Sleep(time.Second * 60)
}

func pinger(c chan string) {
    for{
        c <- "ping" 
    }
}

func printer(c chan string) {
   for {
       msg := <- c
       fmt.Println(msg)
       time.Sleep(time.Second * 1)
   }
}

Run on playground

答案 1 :(得分:2)

“最佳”方式是编写易于阅读和维护的代码。 i中的变量func pinger没有任何意义,稍后会有人绊倒该代码将很难理解它的用途。

我会做的

func pinger(c chan string) {
  for {
    c <- "ping" 
  }
}