我目前正在学习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功能中的声明。
感谢所有愿意帮助的人。
答案 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)
}
}
答案 1 :(得分:2)
“最佳”方式是编写易于阅读和维护的代码。 i
中的变量func pinger
没有任何意义,稍后会有人绊倒该代码将很难理解它的用途。
我会做的
func pinger(c chan string) {
for {
c <- "ping"
}
}