当前位置: 首页 > 工具软件 > Go-node > 使用案例 >

Node和Go的大同小异

何琨
2023-12-01

Node和Go两种十分出色的语言。

Gin是Go的框架。
Koa是Node的框架。
Gin和Koa在代码的书写风格上有些很多相似之处。
比如:中间件。
相同之处:
1.都有ctx上下文 (Gin: ctx *gin.Context,koa:ctx)
2.都有向下调用函数(Gin:ctx.Next(),Koa:next())
3.Gin的ctx.Next()和Koa的next()作用相同。并且Gin和Koa中间件执行顺序相同。
4.ctx(ctx *gin.Context)和next(ctx.Next)都是指针传递,都是属于主动传出的那个函数。所以在被传入的函数中调用Next其实是执行了主动传出的Next,也就是整个系统将要执行主动传出函数的下一个中间件。
不同之处:
1.Gin的return只能结束当前函数(中间件或者控制器)的生命,并不能阻止在同一路由下的向下的执行,而Koa的return能够结束整个路由的生命。
2.Gin在当前函数执行完毕后,会顺着路由线顺序执行下一个中间件。Koa不会。
3.Gin必须要用ctx.Abort()阻止下一个中间件的执行,return只能结束当前函数的生命,不能斩断整个路由线。而Koa的return能够结束整个路由的生命(结束当前函数并且斩断路由线)。
4.Gin请求上下文传递信息需要用到ctx.Set和ctx.Get且结构体类型有点不可最终,因为传入的值被转化成了接口类型,而Koa直接往ctx对象身上加东西就可以。这属于原生语言的语法差异。
5.Gin的return和Koa的return均可以给Next的调用者反值?(这个还没试过,试了再更新)

最后小结:
经常听到有人说哪种哪种语言好,哪种不好。
其实,只有好和不好的人,没有好和不好的语言。

所以,能存活到现在,并且流行的语言,没有一种是不好的,也没有一种语言是该被鄙视的(除了python(手动狗头))

那么来说说go和node:
Go和Node都是高并发语言,Go的goroutine和Node的异步原理基本相同。
Node基于V8引擎利用事件循环属于事件驱动型。并且最近node16.0.0更新到了V8引擎的9.0(V8引擎使node提升了10倍左右的性能,想想就刺激(没有特别测过,只是大概估计了下))。
Go利用用户态线程,内存开销极小,性能极高,这他喵绝对是来捣乱的。
当然,在高并发场所两种语言都特别出色。
性能方面谁更强就看运用场所,如果是密集型计算,那肯定是Go,如果是密集型IO,那就看程序员对哪种语言掌握的更好。
其实Go已经暂时先天上超越了Node,不过,未来谁说的准呐。毕竟JavaScript的后台渍渍渍嘿嘿,懂得都懂。
Node能写出一次1-10ms内的请求,也能写出100ms以上的请求。同理Go也是。(除密集型计算的相同业务下Node可能超Go,Go也可能超Node,得看如何写,比如我就用Node写出来比Go快很多的代码,因为当时才接触Go,简直写了个寂寞(再次手动狗头))。

 类似资料: