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

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技术交流群一起交流学习哦。
