InfoQ■Python 切换到 Go的9 个理由,从( 二 )


https://tour.golang.org/concurrency/1
Go的并发解决方案非常易于使用 。 与开发人员必须密切关注异步代码处理方式的Node相比 , 这是一个非常有趣的方案 。
【InfoQ■Python 切换到 Go的9 个理由,从】Go并发的另一个关注点是竞态检测 。 它使应用程序能够很容易地知道异步代码中是否存在任何竞态条件 。
以下是一些学习Go和Channels的重要资源:
https://gobyexample.com/channels
https://tour.golang.org/concurrency/2
http://guzalexander.com/2013/12/06/golang-channels-tutorial.html
https://www.golang-book.com/books/intro/10
https://www.goinggo.net/2014/02/the-nature-of-channels-in-go.html
https://softwareengineering.stackexchange.com/questions/222642/are-go-langs-goroutine-pools-just-green-threads
理由5:编译速度快
用Go编写的最大的微服务项目只需6秒就可以编译完成 。 与Java和C等语言的龟速(turtle-speed)编译相比 , Go的极快编译速度是它的主要生产力 。
理由6:组件团队的能力
让我们从这些数据开始:Go的开发人员没有C和Java的开发人员多 。 根据StackOverflow的统计 , 有38%的开发人员使用Java , 19.3%的开发人员使用C , 但只有4.6%的开发人员使用Go 。 GitHub数据也显示出了类似的趋势:Go比Erlang、Scala和Elixir等语言使用得更广泛 , 但不如Java和C那么流行 。
幸运的是 , Go是一门非常简单易学的语言 。 它只提供了我们需要的基本功能 , 而没有提供其他附加功能 。 它引入了一些新概念 , 例如“defer”声明和内置的“goroutines”以及Channels并发管理等 。 团队中的任何Python、Elixir、C、Scala或Java开发人员都可以在一个月内学习会怎么使用Go编程 , 因为Go非常简单 。
与其他语言相比 , 我们发现建立Go开发团队更加容易 。 如果我们在竞争激烈的环境中(例如在博尔德和阿姆斯特丹)招聘 , 这是一个非常重要的优势 。
理由7:强大的生态系统
生态系统对于我们这样规模的团队(大约20人)来说非常重要 。 如果你不得不重新设计所有的功能 , 你就不能为你的客户创造价值 。 Go为我们经常使用的工具提供了强大的支持 。 例如 , Redis、RabbitMQ、PostgreSQL、模板解析、任务调度、表达式解析和DBRocks都可以使用现有的库 。
与其他新语言(例如Rust或Elixir)相比 , Go具有巨大的生态系统优势 。 尽管它不能与Java、Python或Node相提并论 , 但是我们是可以找到许多能够满足基本需求的高质量软件包 。
理由8:Gofmt , 强制代码格式化
Gofmt是一个优秀的命令行程序 , 它内置于Go编译器中 , 可用于格式化代码 。 在功能方面 , 它类似于Python的autopep8 。 我们大多数人都不喜欢争论制表符(tabs)和空格(spaces) , 但格式化的目标始终是一致的 , 实际的格式标准则无关紧要 。 Gofmt以一种形式化的方式来格式化代码 , 以避免所有这些争论 。
理由9:gRPC以及ProtocolBuffers
Go为ProtocolBuffers和gRPC提供了一流的支持 。 它将这两个工具完美地结合在一起 , 构建了一个通过RPC进行通信的微服务 。 我们只需编写一个定义了RPC调用及其参数的清单文件 , 服务端和客户端就可以据此自动生成适当的代码了 。 这不仅速度快 , 而且网络占用空间小 , 使用起来更方便 。
其他语言(如C、Java、Python和Ruby)中的客户端代码也可以基于相同的清单文件生成 。 这样 , 就不会与内部REST接口发生冲突了 , 而且我们也不必每次都编写几乎相同的客户端和服务端代码 。
使用Golang的缺点
缺点1:缺乏框架
Go不像Ruby的Rails、Python或Django或PHP的Laravel , 它没有一个主要的框架 。 这个话题在Go社区引起了激烈的争论 , 许多人认为不应该使用现有的框架来启动项目 。 在某些情况下 , 我完全同意这一点 。 但是 , 如果我们想要构建一个简单的CRUDAPI , 那么使用Django/DJRF、RailsLaravel或Phoenix则会更简单 。


推荐阅读