m*****n 发帖数: 3575 | 1 package main
import "fmt"
import "time"
var tick *time.Ticker
func main() {
tick = time.NewTicker(time.Second)
tick.Stop()
tick = time.NewTicker(2 * time.Second)
timer := time.NewTimer(10 * time.Second) //simulate an external end
signal
LOOP:
for {
select {
case <-tick.C:
fmt.Println(time.Now())
case <-timer.C:
tick.Stop()
break LOOP
}
}
}
---------------
以上代码介绍了重复工作是如何被外来信号终止的,即耦合逻辑的实现
除了break LOOP之外,还可以用goto去标注的任何代码位置,控制力拉满了。
那么复杂的网络编程显得清晰可读,果然是老鸟做的架构。
go的毛病是时间计算等比较繁琐,需要适应。有些库也简陋了。
除此之外比Python要好使,特别是比async python简洁。 |
h**********c 发帖数: 4120 | |
m*****n 发帖数: 3575 | 3
看不懂你的意思
【在 h**********c 的大作中提到】 : 叫你看LS源代码你看了么?
|
h**********c 发帖数: 4120 | |
m*****n 发帖数: 3575 | 5 管道还是不缓存的好:
package main
import (
"fmt"
"time"
)
var c = make(chan int)
func report(){
for{
select{
case n:= <- c:
fmt.Println(n, time.Now().Format("2006-01-02 15:04:05"))
default:
time.Sleep(time.Second)
}
}
}
func main() {
go report()
for i:=1; i<=5; i++{
c <- i
}
} |