Golang 的异步编程模型比 Node 有意思
发布于 1年前 作者 jiyinyiyong 3473 次浏览

Node 里异步编程, 只能靠 callback 或者 promise 来完成, 但是 Golang 看起来有意思多了…

package main
import "fmt"
 
func foo(){
    defer fmt.Println("World")
    fmt.Println("Hello")
}
 
func sum(x,y int,c chan int){
    c <- x + y
}
 
func main(){
    foo()
    c := make (chan int);
    go sum(24,18,c)
    fmt.Println(<-c);
}

通过 Channel 的概念, fmt.Println(<-c) 会阻塞代码执行, 而 go sum(24,18,c) 启动的 goroutine 则继续执行, 等到 c <- x + y 往 Channel 里发送了数据, fmt.Println(<-c) 接收到了数据, 才继续执行代码, 这样就比较方便能用同步的逻辑写异步代码, Node 也方便, 但是不够优雅 …难怪那么多人用惯了后端语言以后不喜欢 Node

感受下 Golang 的中文社区 http://www.golangtc.com/ studygolang.com/ https://groups.google.com/d/forum/golang-china

26 回复

玩过go,但是还是喜欢node~

golang太精确,不用的不注释掉,好像不能运行.加上还要给变量定义类型,特别是req跟res,要输好长一串.研究了段时间就没有继续了,不过go sum(24,18,c),这个异步确实不错

有意思么,还是喜欢node.

嗯, 静态类型, 编译代码结果就是汇编在跑, 精确还是好事, 不是琐碎就好了

golang已经成了我做项目的首选,当然node.js也很是喜欢,做游戏的话node.js是首选

静态编译很多语法错误能够在编译的时候避免了。

一个是静态语言,一个是动态语言,差别太大了……

很难说那个好,例如底层的libuv,它也不是协程的方式,代码也不写起来很舒服?

就让时间去证明吧。

我们不要纠结在起点,喜欢用什么的就用什么,just code it

Node 玩来玩去就这么点东西, 除了方便一点…

@jiyinyiyong 那种语言的本质不是一样的?

@suqian 如果因为本质一样就不需要不同语言, 就不会有那么多语言出现了. 话说本质这东西学了三四年还是摸不到啊 T_T 还不是为了更好玩. 可 Node 受 JS 语法限制, 没有多少有趣的特性, JS 程序员, 相当多就死死卡着 JS, 不如新语言学着开心… 虽然做事情未必,

Go挺好,就是语法太另类了。。

相信我, JS 的语法绝对比 Go 欠缺考虑. 另类本身和褒贬没有关联.

@jiyinyiyong 新语言年年有,选择一个自己最喜欢的,深入够再考虑新欢。

@suqian 嗯, 最后还是要实战来指导的. 不过目前写前端的话, 后端我先学到哪是哪了

看不懂…go是用了协程吗???

golang有比较好的mvc框架吗

类似 coroutine 但不叫 coroutine, 网上的说法是个叫 CSP 的并发模型.

网上有但还没了解过, 后端 MVC 相对来说还是不少的

多的很,beego,revel跟express差不多的

@dengqiao大神你好啊,revel是哪国的框架啊,这个没有说明文档教程的吧

ES6里会出来generator的,不用羡慕。

ES6 依然单线程哦, Golang 的并发模型能用在并行计算的

回到顶部