page contents

golang就是go语言吗

Go是一个通用(General-Purpose)编程语言,这一点和C++以及Java是一致的。但通用不代表哪里都是最好,我们也要根据Go的特点来找到最适合Go的应用场景。

attachments-2021-09-6NM8qgCq613c07b53eac3.jpg

Go是一个通用(General-Purpose)编程语言,这一点和C++以及Java是一致的。但通用不代表哪里都是最好,我们也要根据Go的特点来找到最适合Go的应用场景。

Go的特点:

编译:

运行编译好的Go程序不需要额外安装像java的jdk或者js的node这样的运行环境,同时Go提供了原生的交叉编译支持,跨平台的开发和部署非常方便。

当然编译运行也更容易带来更好的运行效率,不过这方面也不能迷信,越来越多的“解释型”编程语言的运行环境开始支持J川T,这让Go这种编译所带来的性能优势变得没有那么明显。

静态类型:

这对目前主流服务器端应用的项目规模来说,这是个很大优点,项目变得复杂时,能在编译期发现错误,总归比运行期发现来的简单。

C家族语言:

Go虽然吸收了很多现代编程语言的优点,但它主要还是可以看做是对C语言的继承和发展,又拒绝了C++中过于复杂的东西。对于日常编程,我们一般还是可以延续很多C语言的编程习惯的。

Gc:

自动的垃圾回收对大多数服务器端项目来说是不可或缺的。这也是Go为什么能比Rust更早成为一个比较大众的编程语言的主要原因。

简单:

简单是Go语言最根本的设计理念。简单到丑,你可以说是阉割了很多东西,你也可以说是和scala走向不同的极端。但有失就有得,我觉得在很多项目中,go这种简单直接的做法更加适合互联网行业快上快下的作风。

工具
包括godoc,包括code generation,包括test,benchmark,race-condition的检查,包括1.11中的Module等等,我觉得这部分是go最像一个现代编程语言的部分。
依赖管理
Go没有直接的类型继承,而是采用了一种隐性的继承方式。这样弱化类型继承带来的强耦合,由像“核心”模块代码依赖转变为每个模块向内依赖。这对于Google这种使用Monorepo的公司是非常有用的。
有些朋友已经发现Go的编译速度特别快,即便是很大的项目,编译时间也不会指数级增长,其实也是得益于这种依赖的管理方式。所以我没把编译速度快这个这么重要的优点作为Go的特点,而是把依赖管理放在这里。
并发编程
Go采用了和erlang很类似的方式来处理并发。我以前的回答中有讨论过channel和mailbox的不同,我觉得channel和协程更加灵活。
但需要注意的是Go这种协程调度方式更加适合IO密集的应用服务,但对CPU密集的应用服务,可能会观察到部分请求响应时间略高(个人观察体会,其实也不是很大影响)。
泛型:
Go 1.xx有限度的在数组,map和channel中支持泛型,我觉得可以有效的保证泛型不会被滥用。但这也招来了很多反对的声音,好多朋友都希望自己能够定义java和c#中的那种范型,那你只能等还在设计和开发中Go2了。
错误异常处理:
这也是Go被诟病最多的地方,这方面很多文章了,我就不拾人牙慧了。我觉得的确是Go的Error处理是过于简单粗暴了一点,但也不是一无是处。这方面在Go2.0中也会通过check和handler来改进。
生态:
Go生来就是面向开源世界的语言,早先基于github的包管理,formater对于单一化tab的强制要求等等等等,让开源一个Go项目变得很舒服而且顺理成章。你要开源一个scala项目,估计要事先写上几天的代码风格指导书。
对于一个新语言来说,go的生态是很让人惊叹的,这点也要着重感谢Uber等公司对自己Go代码的开源。
总结: Go比C++要简单,比Java要轻,比Ruby/Python等要快,比Js/Php等工程性更好。这里不是说Go牛x,只是Go更均衡,这让Go非常适合实现多数服务器端的业务逻辑。
Go的应用场景:
谁在使用GO:
虽然Go是google开发的编程语言,但是现在Uber似乎是Go最大的用户(我个人觉得头条可能应用规模更大,但是uber暂时在世界范围有更大的技术影响力)。另外几个比较有影响力的公司/项目是Docker,Kubernetes,Fabric和twitch。
可以说现在Go在后端的影响力已经超过了不少老牌编程语言,是互联网创业公司新项目的首选热门语言之一。
用Go来干什么:
1,实现服务器端服务的业务逻辑,是C++,Java,Ruby,Python和Php的很好替代。也可以用来实现高并发的中间件,不过在对延迟要求极度苛刻的环境下,C/C++和Rust似乎是更好的选择。对于大Heap管理和高吞吐量GC方面,我个人觉得JVM还更胜一筹。我们要扬长避短,针对自己的应用情况,合理使用。
2,实现工是,实现资源匮乏环境的应用等。
3,Web Assembly这个玩意或许会可以在浏览器开发中走的更远。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

程序员编程交流QQ群:805358732

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-K27SrGKv62afe0c71f446.jpeg

  • 发表于 2021-09-11 09:34
  • 阅读 ( 496 )
  • 分类:Golang

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章