留意:当然若何轻易照样要取决于你的应用案例。如不雅你要创建一个根本的 CRUD API,我照样建议你应用 Django + DRF,或者 Rails。
原因 4:并发性&通道
Go 作为一门说话致力于使工作简单化。它并未惹人很多新概念,而是聚焦于打造一门简单的说话,它应用起来异常快速并且简单。其独一的立异之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级办法,而通道是 goroutines 之间通信的优先方法。
创建 Goroutines 的成本很低,只需几千个字节的额外内存,正因为此,才使得同时运行数百个甚至数千个 goroutines 成为可能。你可以借助通道实现 goroutines 之间的通信。Go 运行时光可以表示所有的复杂性。Goroutines 以及基于通道的并发性办法使其异常轻易应用所有可用的 CPU 内核,并处理并发的 IO——所有不带有复杂的开辟。相较于 Python/Java,在一个 goroutine 上运行一个函数须要最小的样板代码。你只需应用关键词「go」添加函数调用:
- package main
- import (
- "fmt"
- "time")func say(s string) {
- for i := 0; i < 5; i++ {
- time.Sleep(100 * time.Millisecond)
- fmt.Println(s)
- }}func main() {
- go say("world")
- say("hello")}
Go 的并发性办法异常轻易上手,相较于 Node 也很有趣;在 Node 中,开辟者必须密切存眷异步代码的处理。
并发性的另一个优质特点是比赛检测器,这使其很轻易弄清跋扈异步代码中是否存在竞态前提。下面是一些上手 Go 和通道的很好的资本:
- 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
原因 5:快速的编译时光
当前我们应用 Go 编写的最大年夜微办事的编译时光只需 6 秒。相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时光是一个重要的效力优势。我酷爱击剑,然则当我依然记得代码应当做什么刹那,工作已经完成就更好了。
Go 之前的代码编译
原因 6:打造团队的才能
起首,最明显的一点是:Go 的开辟者远没有 C++和 Java 等旧说话多。据知,有 38% 的开辟者懂得 Java,19.3% 的开辟者懂得 C++,只有 4.6% 的开辟者知道 Go。GitHub 数据注解了类似的趋势:相较于 Erlang、Scala 和 Elixir,Go 更为风行,然则相较于 Java 和 C++ 就不是了。
荣幸的是 Go 异常简单,且易于进修。它只供给了根本功能而没有多余。Go 惹人的新概念是「defer」声明,以及内置的带有 goroutines 和通道的并发性治理。恰是因为 Go 的简单性,任何的 Python、Elixir、C++、Scala 或者 Java 开辟者皆可在一月内组建成一个高效的 Go 团队。
原因 7:强大年夜的生态体系
Go 说话没有一个重要的框架,如 Ruby 的 Rails 框架、Python 的 Django 框架或 PHP 的 Laravel。这是 Go 说话社区激烈评论辩论的问题,因为很多人认为我们不该该大年夜应用框架开端。在很多案例情况中确切如斯,但如不雅只是欲望构建一个简单的 CRUD API,那么应用 Django/DJRF、Rails Laravel 或 Phoenix 将简单地多。
Go 的生态体系比拟于 Rust、Elixir 如许的说话有很大年夜的优势。当然,它又略逊于 Java、Python 或 Node 如许的说话,但它很稳定,并且你会发明在很多基本需求上,已经有高质量的文件包可用了。
原因 8:GOFMT,强迫代码格局
Gofmt 是一种强大年夜的敕令行功能,内建在 Go 的编译器中来规定代码的格局。大年夜功能上看,它类似于 Python 的 autopep8。格局一致很重要,但实际的格局标准并不老是异常重要。Gofmt 用一种官方的情势规格代码,避免了不须要的评论辩论。
原因 9:gRPC 和 Protocol Buffers
我们实施的一个有趣实验是用 Python 写排名 feed,然后用 Go 改写。看下面这种排序办法的示例:
大年夜雷同的清单,我们可以大年夜不合的说话生成客户端代码,例如 C++、Java、Python 和 Ruby。是以内部通信的 RESET 端点不会产生不合,我们每次也就须要编写几乎雷同的客户端和办事器代码。
应用 Go 说话的缺点
缺点 1:缺乏框架
缺点 2:缺点处理
Go 说话经由过程函数和预期的调用代码简单地返回缺点(或返回调用客栈)而赞助开辟者处理编译报错。固然这种办法是有效的,但很轻易损掉缺点产生典范围,是以我们也很难向用户供给有意义的缺点信息。缺点包(errors package)可以许可我们添加返回缺点的高低文和客栈追踪而解决该问题。
推荐阅读
沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 因为你只须要简单进修三种说话的写法,就能轻松上手开辟小法度榜样。固然说的很有事理,我并不否定小法度榜>>>详细阅读
本文标题:Go语言的9大优势和3大缺点
地址:http://www.17bianji.com/lsqh/38136.html
1/2 1