赞
踩
这段代码的目的是算出100以内所有的质数,当然你可以从命令行输入你想要验证的最大数字。
理解了递归,协程,通道就能读懂这段代码。反过来读懂了这段代码,也就理解了递归,协程和通道。
令人汗颜的是,由于刚开始不太熟悉golang的协程和通道机制,看懂这段代码花了十几分钟… 看懂了之后感觉非常好。希望你也可以。
package main import ( "flag" "fmt" "os" "strconv" ) type T struct { A int B string } var goal int var mark int func primetask(c chan int) { p := <-c mark++ if p > goal { os.Exit(0) } fmt.Println() nc := make(chan int) go primetask(nc) for { i := <-c fmt.Println("mark=", mark, "i=", i, "p=", p) if i%p != 0 { nc <- i } } } func main() { flag.Parse() args := flag.Args() if args != nil && len(args) > 0 { var err error goal, err = strconv.Atoi(args[0]) if err != nil { goal = 100 } } else { goal = 100 } fmt.Println("goal =", goal) c := make(chan int) go primetask(c) for i := 2; ; i++ { c <- i } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。