CNode

Golang 的异步编程模型比 Node 有意思

Jjiyinyiyong发布于13 年前最后回复13 年前26 回复21221 浏览0 收藏

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)

X
xieren58#1·13 年前

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

L
lb1104#3·13 年前

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

H
hhuai#4·13 年前

有意思么,还是喜欢node.

X
xieren58#6·13 年前
引用 xieren58玩过go,但是还是喜欢node

@jiyinyiyong 感情上喜欢node~

D
dengqiao#8·13 年前

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

H
hexie#9·13 年前

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

H
halfblood#10·13 年前

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

F
fengmk2#11·13 年前

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

就让时间去证明吧。

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

J
jiyinyiyong#14·13 年前
引用 fengmk2很难说那个好,例如底层的libuv,它也不是协程的方式,代码也不写起来很舒服? 就让时间去证明吧。 我们不要纠结在起点,喜欢用什么的就用什么,just code it

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

L
liuyanghejerry#15·13 年前

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

J
jiyinyiyong#16·13 年前
引用 liuyanghejerryGo挺好,就是语法太另类了。。

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

N
nobuta#19·13 年前

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

L
livejs#20·13 年前

golang有比较好的mvc框架吗

J
jiyinyiyong#21·13 年前
引用 nobuta看不懂...go是用了协程吗???

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

J
jiyinyiyong#22·13 年前
引用 livejsgolang有比较好的mvc框架吗

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

D
dengqiao#23·13 年前
引用 livejsgolang有比较好的mvc框架吗

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

L
livejs#24·13 年前
引用 livejsgolang有比较好的mvc框架吗

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

J
JacksonTian#25·13 年前

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

J
jiyinyiyong#26·13 年前
引用 JacksonTianES6里会出来generator的,不用羡慕。

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

参与回复
登录后即可参与回复。登录