广告
返回顶部
首页 > 资讯 > 数据库 >Go语言的优势及缺点有哪些
  • 611
分享到

Go语言的优势及缺点有哪些

2024-04-02 19:04:59 611人浏览 安东尼
摘要

这篇文章主要讲解了“Go语言的优势及缺点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言的优势及缺点有哪些”吧!Go的优势 原因 1:性能

这篇文章主要讲解了“Go语言的优势及缺点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言的优势及缺点有哪些”吧!

Go的优势


原因 1:性能


Go 极其地快。其性能与 Java 或 c++相似。在我们的使用中,Go 一般比 python 要快 30 倍。以下是 Go 与 Java 之间的基准比较:

原因 2:语言性能很重要

对很多应用来说,编程语言只是简单充当了其与数据集之间的胶水。语言本身的性能常常无关轻重。

但是 Stream 是一个 api 提供商,服务于世界 500 强以及超过 2 亿的终端用户。数年来我们已经优化了 Cassandra、postgresqlRedis 等等,然而最终抵达了所使用语言的极限。

Python 非常棒,但是其在序列化/去序列化、排序和聚合中表现欠佳。我们经常会遇到这样的问题:Cassandra 用时 1ms 检索了数据,Python 却需要 10ms 将其转化成对象。

原因 3:开发者效率&不要过于创新

  1. packagemain

  2. typeopenWeatherMapstruct{}func(wopenWeatherMap)temperature(citystring)(float64,error){

  3. resp,err:=Http.Get("http://api.openweathermap.org/data/2.5/weather?APPID=YOUR_API_KEY&q="+city)

  4. iferr!=nil{

  5. return0,err

  6. }

  7. deferresp.Body.Close()

  8. vardstruct{

  9. Mainstruct{

  10. Kelvinfloat64`JSON:"temp"`

  11. }`json:"main"`

  12. }

  13. iferr:=json.NewDecoder(resp.Body).Decode(&d);err!=nil{

  14. return0,err

  15. }

  16. log.Printf("openWeatherMap:%s:%.2f",city,d.Main.Kelvin)

  17. returnd.Main.Kelvin,nil}

如果你是一个新手,看到这段代码你并不会感到吃惊。它展示了多种赋值、数据结构、指针、格式化以及内置的 HTTP 库。

当我***次编程时,我很喜欢使用 Python 的高阶功能。Python 允许你创造性地使用正在编写的代码,比如,你可以:

  • 在代码初始化时,使用 MetaClasses 自行注册类别

  • 置换真假

  • 添加函数到内置函数列表中

  • 通过奇妙的方法重载运算符

    毋庸置疑这些代码很有趣,但也使得在读取其他人的工作时,代码变得难以理解。

    Go 强迫你坚持打牢基础,这也就为读取任意代码带来了便利,并能很快搞明白当下发生的事情。

    注意:当然如何容易还是要取决于你的使用案例。如果你要创建一个基本的 CRUD API,我还是建议你使用 Django + DRF,或者 Rails。

    原因 4:并发性&通道

    Go 作为一门语言致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,它使用起来异常快速并且简单。其唯一的创新之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级方法,而通道是 goroutines 之间通信的优先方式。

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


    Go 的并发性方法非常容易上手,相较于 node 也很有趣;在 Node 中,开发者必须密切关注异步代码的处理。

    并发性的另一个优质特性是竞赛检测器,这使其很容易弄清楚异步代码中是否存在竞态条件。

    原因 5:快速的编译时间

    当前我们使用 Go 编写的***微服务的编译时间只需 6 秒。相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时间是一个主要的效率优势。我热爱击剑,但是当我依然记得代码应该做什么之时,事情已经完成就更好了。

    1. packagemain

    2. import(

    3. "fmt"

    4. "time")funcsay(sstring){

    5. fori:=0;i<5;i++{

    6. time.Sleep(100*time.Millisecond)

    7. fmt.Println(s)

    8. }}funcmain(){

    9. gosay("world")

    10. say("hello")}

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:强大的生态系统

对我们这么大小的团队(大约 20 人)而言,生态系统很重要。如果你需要重做每块功能,那就无法为客户创造收益了。Go 有着强大的工具支持,面向 Redis、RabbitMQ、Postgresql、Template parsing、Task scheduling、Expression parsing 和 RocksDB 的稳定的库。

Go 的生态系统相比于 Rust、Elixir 这样的语言有很大的优势。当然,它又略逊于 Java、Python 或 Node 这样的语言,但它很稳定,而且你会发现在很多基础需求上,已经有高质量的文件包可用了。

原因 8:GOFMT,强制代码格式

Gofmt 是一种强大的命令行功能,内建在 Go 的编译器中来规定代码的格式。从功能上看,它类似于 Python 的 autopep8。格式一致很重要,但实际的格式标准并不总是非常重要。Gofmt 用一种官方的形式规格代码,避免了不必要的讨论。

原因 9:gRPC 和 Protocol Buffers

Go 语言对 protocol buffers 和 grpc 有***的支持。这两个工具能一起友好地工作以构建需要通过 rpc 进行通信的微服务器(microservices)。我们只需要写一个清单(manifest)就能定义 RPC 调用发生的情况和参数,然后从该清单将自动生成服务器和客户端代码。这样产生代码不仅快速,同时网络占用也非常少。

从相同的清单,我们可以从不同的语言生成客户端代码,例如 C++、Java、Python 和 Ruby。因此内部通信的 RESET 端点不会产生分歧,我们每次也就需要编写几乎相同的客户端和服务器代码。

使用 Go 语言的缺点


缺点 1:缺少框架

Go 语言没有一个主要的框架,如 Ruby 的 Rails 框架、Python 的 Django 框架或 PHP 的 Laravel。这是 Go 语言社区激烈讨论的问题,因为许多人认为我们不应该从使用框架开始。在很多案例情况中确实如此,但如果只是希望构建一个简单的 CRUD API,那么使用 Django/DJRF、Rails Laravel 或 Phoenix 将简单地多。

缺点 2:错误处理

Go 语言通过函数和预期的调用代码简单地返回错误(或返回调用堆栈)而帮助开发者处理编译报错。虽然这种方法是有效的,但很容易丢失错误发生的范围,因此我们也很难向用户提供有意义的错误信息。错误包(errors package)可以允许我们添加返回错误的上下文和堆栈追踪而解决该问题。

另一个问题是我们可能会忘记处理报错。诸如 errcheck 和 megacheck 等静态分析工具可以避免出现这些失误。虽然这些解决方案十分有效,但可能并不是那么正确的方法。

缺点 3:软件包管理

Go 语言的软件包管理绝对不是***的。默认情况下,它没有办法制定特定版本的依赖库,也无法创建可复写的 builds。相比之下 Python、Node 和 Ruby 都有更好的软件包管理系统。然而通过正确的工具,Go 语言的软件包管理也可以表现得不错。

我们可以使用 Dep 来管理依赖项,它也能指定特定的软件包版本。除此之外,我们还可以使用一个名为 VirtualGo 的开源工具,它能轻松地管理 Go 语言编写的多个项目

Python vs Go

我们实施的一个有趣实验是用 Python 写排名 feed,然后用 Go 改写。看下面这种排序方法的示例:

  1. {

  2. "functions":{

  3. "simple_gauss":{

  4. "base":"decay_gauss",

  5. "scale":"5d",

  6. "offset":"1d",

  7. "decay":"0.3"

  8. },

  9. "popularity_gauss":{

  10. "base":"decay_gauss",

  11. "scale":"100",

  12. "offset":"5",

  13. "decay":"0.5"

  14. }

  15. },

  16. "defaults":{

  17. "popularity":1

  18. },

  19. "score":"simple_gauss(time)*popularity"}

Python 和 Go 代码都需要以下要求从而支持上面的排序方法:

  • 解析得分的表达。在此示例中,我们想要把 simple_gauss(time)*popularity 字符串转变为一种函数,能够把 activity 作为输入然后给出得分作为输出。

  • 在 JSON config 上创建部分函数。例如,我们想要「simple_gauss」调用「decay_gauss」,且带有的键值对为”scale”: “5d”、”offset”: “1d”、”decay”: “0.3”。

  • 解析「defaults」配置,便于某个领域没有明确定义的情况下有所反馈。

  • 从 step1 开始使用函数,为 feed 中的所有 activity 打分。

    开发 Python 版本排序代码大约需要 3 天,包括写代码、测试和建立文档。接下来,我么花费大约 2 周的时间优化代码。其中一个优化是把得分表达 simple_gauss(time)*popularity 转译进一个抽象语法树。我们也实现了 caching logic,之后会预先计算每次的得分。

    相比之下,开发 Go 版本的代码需要 4 天,但之后不需要更多的优化。所以虽然最初的开发上 Python 更快,但 Go 最终需要的工作量更少。此外,Go 代码要比高度优化的 python 代码快了 40 多倍。

    以上只是我们转向 Go 所体验到的一种好处。当然,也不能这么做比较:

    • 该排序代码是我用 Go 写的***个项目;

    • Go 代码是在 Python 代码之后写的,所以提前理解了该案例;

    • Go 的表达解析库质量优越。


      Elixir vs Go

      我们评估的另一种语言是 Elixir。Elixir 建立在 Erlang 虚拟机上。这是一种迷人的语言,我们之所以想到它是因为我们组员中有一个在 Erlang 上非常有经验。

      在使用案例中,我们观察到 Go 的原始性能更好。Go 和 Elixir 都能很好地处理数千条并行需求,然而,如果是单独的要求,Go 实际上更快。相对于 Elixir,我们选择 Go 的另一个原因是生态系统。在我们需求的组件上,Go 的库更为成熟。在很多案例中,Elixir 库不适合产品使用。同时,也很难找到/训练同样使用 Elixir 的开发者。

      结论

      Go 是一种非常高效的语言,高度支持并发性。同时,它也像 C++和 Java 一样快。虽然相比于 Python 和 Ruby,使用 Go 建立东西需要更多的时间,但在后续的代码优化上可以节省大量时间。在 Stream,我们有个小型开发团队为 2 亿终端用户提供 feed 流。对新手开发者而言,Go 结合了强大的生态系统、易于上手,也有超快的表现、高度支持并发性,富有成效的编程环境使它成为了一种好的选择。Stream 仍旧使用 Python 做个性化 feed,但所有性能密集型的代码将会用 Go 来编写。


感谢各位的阅读,以上就是“Go语言的优势及缺点有哪些”的内容了,经过本文的学习后,相信大家对Go语言的优势及缺点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言的优势及缺点有哪些

本文链接: https://www.lsjlt.com/news/59728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言的优势及缺点有哪些
    这篇文章主要讲解了“Go语言的优势及缺点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言的优势及缺点有哪些”吧!Go的优势 原因 1:性能 ...
    99+
    2022-10-18
  • go语言有哪些缺点
    go语言的缺点有:1、标准库方面相对较小,其中并不包含很多常见的功能;2、错误处理机制相对较为繁琐,可能会导致代码的可读性和可维护性降低,并且容易忽略错误处理的情况;3、包管理器相对较弱,处理依赖版本冲突和依赖管理方面的灵活性相对较低;4、...
    99+
    2023-07-31
  • go语言有哪些优势
    go语言的优势有高效编译、并发处理能力强、内存管理优秀、类型安全、丰富的标准库、跨平台支持、简单易学、静态链接和可执行文件生成、内置的包管理工具以及多核支持等。详细介绍:1、高效编译,Go语言的编译速度非常快,可以快速生成可执行文件;2、并...
    99+
    2023-12-11
    go语言
  • go语言有哪些优势劣势
    go语言的优势:1、简洁、高效、安全;2、并发处理能力强;3、静态类型和编译型;4、丰富的标准库;5、跨平台和可移植性;6、强大的性能;7、原生支持多范式编程;8、垃圾回收机制;9、强大的并发模型。go语言的劣势:1、语法相对较新;2、生态...
    99+
    2023-12-11
    go语言 优势劣势
  • go语言具有哪些优势
    go语言具有性能优越、并发能力强、静态类型、丰富的标准库、跨平台、简洁易读、并发安全、内存管理、高效编译、支持网络和Web开发等优势。详细介绍:1、性能优越:Go语言是编译型语言,相较于解释型语言,如Python,其运行速度更快,性能更优;...
    99+
    2023-12-11
    go语言 优势
  • go语言有哪些优点
    go语言的优点有:1、简洁易学,具有清晰简洁的语法和规范,减少了代码的复杂性;2、并发编程,内置了强大的并发编程功能,使得编写高效且可扩展的并发程序变得容易;3、高效性能,在编译代码时能够生成高度优化的机器码;4、跨平台支持,可以在不同的操...
    99+
    2023-07-31
  • Go语言的优点有哪些
    本篇内容主要讲解“Go语言的优点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言的优点有哪些”吧!简洁性Go 和 Java 都是 C 家族语言,所以...
    99+
    2022-10-19
  • php语言优缺点有哪些
    小编给大家分享一下php语言优缺点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发...
    99+
    2023-06-14
  • go语言的用途是什么及有哪些优势
    这篇文章主要介绍“go语言的用途是什么及有哪些优势”,在日常操作中,相信很多人在go语言的用途是什么及有哪些优势问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言的用途是什么及有哪些优势”的疑惑有所帮助!...
    99+
    2023-07-04
  • R语言的优点和缺点有哪些
    本篇内容介绍了“R语言的优点和缺点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! R语言拥有强大的软件包生态系统与图表优势R语言的优势...
    99+
    2023-06-17
  • kotlin语言有哪些优点和缺点
    Kotlin语言的优点和缺点如下: 优点: 简洁:Kotlin语言相较于Java语言更加简洁,减少了很多冗余的代码,提升了开发效率...
    99+
    2023-10-25
    kotlin
  • dart语言有哪些优点和缺点
    优点:1. 快速开发:Dart语言内置了许多现代语言的特性,如异步编程和代码重用等,使得开发速度更快。2. 高性能:Dart语言的J...
    99+
    2023-06-13
    dart语言
  • Go语言的日志系统有哪些特点和优势?
    日志系统是现代软件开发中必不可少的一部分。它不仅可以帮助开发人员调试程序,还可以记录应用程序的运行状态和行为。在Go语言中,标准库提供了log包,可以方便地记录日志。除此之外,还有一些第三方库也可以用于日志记录,例如zap和logrus等...
    99+
    2023-07-27
    同步 并发 日志
  • Go语言的使用优点有哪些
    这篇“Go语言的使用优点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言的使用优点有哪些”文章吧。Map 集合/...
    99+
    2023-06-16
  • 使用Go语言的优点有哪些
    本篇内容介绍了“使用Go语言的优点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Go语言的优势强悍并发性能(Go内置Goroutine...
    99+
    2023-06-15
  • asp编程语言有哪些优缺点
    优点:1. ASP是一种强大的服务器端脚本语言,能够处理大量的并发请求。2. ASP语言易于学习,因为它使用了一些与C和Visual...
    99+
    2023-06-14
    asp编程
  • julia的语法特点及优势有哪些
    Julia的语法特点及优势如下:1. 高性能:Julia的设计目标之一就是实现高性能计算。它采用了即时编译的方式,能够将代码转换为机...
    99+
    2023-09-21
    julia
  • 对于实时编程,Go 语言和 JavaScript 有哪些优缺点?
    实时编程是一种需要快速响应的编程方式,它需要在预定的时间内完成任务。在实时编程中,时间是最重要的因素。因此,开发人员需要使用一种高效的编程语言来实现实时编程。在本文中,我们将比较两种主流的编程语言:Go 语言和 JavaScript,并分析...
    99+
    2023-09-08
    实时 教程 javascript
  • c语言malloc函数有哪些优缺点
    malloc函数是C语言中用于动态分配内存的函数。它的主要优点和缺点如下:优点:1. 动态分配内存:malloc函数可以根据需要动态...
    99+
    2023-10-12
    c语言
  • go语言相对于c/c++的优势有哪些
    这篇文章将为大家详细讲解有关go语言相对于c/c++的优势有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。优势有:1、Go语言语法简单,学习曲线容易;2、快速的编译时间,开发效率和运行效率高;3、自由...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作