由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - go是最适合复杂耦合环境的语言
进入Programming版参与讨论
1 (共1页)
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
2
叫你看LS源代码你看了么?
m*****n
发帖数: 3575
3

看不懂你的意思

【在 h**********c 的大作中提到】
: 叫你看LS源代码你看了么?
h**********c
发帖数: 4120
4
您老来扫盲信号处理,应该门门清啊
https://github.com/wertarbyte/coreutils/blob/master/src/ls.c

【在 m*****n 的大作中提到】
:
: 看不懂你的意思

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
}
}
1 (共1页)
进入Programming版参与讨论