从 Node.js 到 Go

简介: 从 Node.js 到 Go

Go 是一个具有高性能、高并发、跨平台的语言,正在得到越来越来广泛的关注与应用。俗话说,技多不压身,多掌握一门语言也就意味着在应用开发的时候拥有了更丰富的选择余地。本文将会站在 node.js 开发者的立场上对比介绍一些 Go 的特性,从而帮助大家快速了解 Go 语言。



01



1、静态类型


Node.js 是动态类型:

let a = '1';
a = 2;
console.log('3' == 3);

上面的代码中,a 本来是一个 string 类型的变量,然而它可以直接被重新赋值为一个 number 类型,同时 string 与 number 这两个不同的类型也可以直接进行相等判断(会自动进行类型转换)。这些都说明 node.js 是动态类型的语言。


然而 Go 是静态类型,这意味着你无法直接将某个类型的值赋值给另一种类型的变量(需要使用特定的类型转换方法),也无法在不同的类型上进行相等判断。


静态类型有益于构建大型应用,提高可靠性,排除不稳定因素。Typescript 的广泛应用也反映出开发者对于强类型系统的迫切需要,而 Go 本身就是静态类型。



2、编译型语言


Go 是一个编译型的语言,这意味着我们需要对代码进行编译,生成一个可执行的二进制文件,然后直接执行这个二进制文件就行了,在部署时也只需要这一个可执行文件就够了。


Node.js 是一个解释型的语言,没有编译这个过程,它是在运行时不停的解释程序然后执行获取结果。解释型就好像吃火锅一样,一遍涮菜一边吃,而编译型就好像吃家常菜一样,全部做好了直接吃,这种差异也导致了解释型语言的效率要低于编译型语言。


解释型的语言执行需要有运行环境的支持,说白了就是你必须要有代码,同时配置好运行所需要的各种环境(比如 node.js 和其它各种依赖库),而 Go 不需要这些,它只需要一个编译生成的二进制可执行文件就行了。当然针对不同的系统,Go 可以进行交叉编译。总之 Go 的性能很高,同时也是跨平台的,具有很好的移植性。



3、gofmt 强制代码格式


Node.js 并没有规定代码格式,所以在实际编程过程中,我们可能会引入各种不同的第三方库,然后形成五花八门的代码格式。


Go 本身自带的工具链 gofmt 就强制规定了代码格式,无需依赖第三方库,同时也避免了格式之争,有助于大型项目的维护及多人协作。



4、第三方库


Node.js 的繁荣离不开 npm 的卓越贡献,npm 上托管了庞大繁杂的第三方库,这意味着我们可以利用这些第三方库快速构建我们的应用,然而带来的问题就是,第三方库质量的参差不齐也会为我们的服务埋下隐患。


相比于 npm ,Go 并没有对等的东西,开源的第三方库几乎都托管在 GitHub 上,然而 Go 本身自带的标准库非常强大,换句话说,不需要第三方库你就可以做很多事情,其次你需要的 GitHub 上也都有。



5、包管理


Node.js 的 npm 既是一个托管平台,也是一个包管理工具,而 Go 的包管理一路走来直到 1.11 版才有了官方正式的包管理工具 go modules(推荐使用),当然这个问题现在来说其实也无伤大雅。


因为墙的原因,网络问题可能会导致某些源拉取不了,这个问题官方也在 1.11 版本进行了解决,方法很简单(需要使用 go modules ),只需要设置一个环境变量即可:

export GOPROXY=https://goproxy.io

6、node.js 的工具


Go 编程,我们同样可以使用 nodemon 和 pm2 这样的工具,nodemon 配置 exec 为 go run 即可,而 pm2 需要注意只能使用 fork 模式(因为 cluster 模式是依赖于 node.js 的)。



02


官方入门教程:https://tour.golang.org


在线平台,不用安装即可在线运行:https://play.golang.org


针对 node.js 开发者的学习示例(强烈推荐):

https://github.com/miguelmota/golang-for-nodejs-developers


项目布局参考:https://github.com/golang-standards/project-layout


各类大全:https://github.com/avelino/awesome-go

目录
相关文章
|
数据采集 JavaScript 前端开发
Go和JavaScript结合使用:抓取网页中的图像链接
Go和JavaScript结合使用:抓取网页中的图像链接
|
3月前
|
JavaScript 前端开发 安全
Node.js和Go有何优势?
【8月更文挑战第4天】Node.js和Go有何优势?
56 3
|
3月前
|
Web App开发 JavaScript 前端开发
Node.js与Go语言的对比?
【8月更文挑战第4天】Node.js与Go语言的对比?
354 3
|
6月前
|
数据采集 JavaScript 前端开发
使用Go和JavaScript爬取股吧动态信息的完整指南
本文介绍了如何使用Go和JavaScript构建网络爬虫,从股吧网站抓取实时股市信息。通过设置代理服务器以应对反爬策略,利用`got`库执行JavaScript提取动态数据,如用户讨论和市场分析。示例代码展示了爬虫的实现过程,包括浏览器实例创建、代理配置、JavaScript执行及数据打印。此方法有助于投资者及时获取市场资讯,为决策提供支持。
使用Go和JavaScript爬取股吧动态信息的完整指南
|
6月前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
145 1
|
SQL JavaScript 关系型数据库
号称下一代Node.js,Typescript以及go的orm的prisma 浅谈如何在nest.js中使用
号称下一代Node.js,Typescript以及go的orm的prisma 浅谈如何在nest.js中使用
号称下一代Node.js,Typescript以及go的orm的prisma 浅谈如何在nest.js中使用
|
JavaScript 程序员 Go
一图看懂编程语言迁移模式:终点站是Python、Go、JS
一图看懂编程语言迁移模式:终点站是Python、Go、JS
109 0
|
前端开发 Go
前端学习笔记202305学习笔记第三十一天-js-代码执行产生EC和GO之1
前端学习笔记202305学习笔记第三十一天-js-代码执行产生EC和GO之1
35 0
|
前端开发 Go
前端学习笔记202305学习笔记第三十一天-js-代码执行产生EC和GO之2
前端学习笔记202305学习笔记第三十一天-js-代码执行产生EC和GO之2
48 0
|
前端开发 Go
前端学习笔记202305学习笔记第三十一天-js-代码执行产生EC和GO之3
前端学习笔记202305学习笔记第三十一天-js-代码执行产生EC和GO之3
43 0