作家
登录

Go语言的9大优势和3大缺点

作者: 来源: 2017-10-24 14:21:39 阅读 我要评论

留意:当然若何轻易照样要取决于你的应用案例。如不雅你要创建一个根本的 CRUD API,我照样建议你应用 Django + DRF,或者 Rails。

原因 4:并发性&通道

Go 作为一门说话致力于使工作简单化。它并未惹人很多新概念,而是聚焦于打造一门简单的说话,它应用起来异常快速并且简单。其独一的立异之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级办法,而通道是 goroutines 之间通信的优先方法。

创建 Goroutines 的成本很低,只需几千个字节的额外内存,正因为此,才使得同时运行数百个甚至数千个 goroutines 成为可能。你可以借助通道实现 goroutines 之间的通信。Go 运行时光可以表示所有的复杂性。Goroutines 以及基于通道的并发性办法使其异常轻易应用所有可用的 CPU 内核,并处理并发的 IO——所有不带有复杂的开辟。相较于 Python/Java,在一个 goroutine 上运行一个函数须要最小的样板代码。你只需应用关键词「go」添加函数调用:

  1. package main 
  2. import ( 
  3.    "fmt" 
  4.    "time")func say(s string) { 
  5.    for i := 0; i < 5; i++ { 
  6.        time.Sleep(100 * time.Millisecond) 
  7.        fmt.Println(s) 
  8.    }}func main() { 
  9.    go say("world"
  10.    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说话的9大年夜优势和3大年夜缺点

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

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)