Golang 的异步编程模型比 Node 有意思
发布于 12 年前 作者 jiyinyiyong 20934 次预览 最后一次回复是 12 年前 来自
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.
嗯, 静态类型, 编译代码结果就是汇编在跑, 精确还是好事, 不是琐碎就好了
@jiyinyiyong 感情上喜欢node~
@xieren58 T_T
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 的并发模型能用在并行计算的