Go语言编程基础

时间:2024-09-24 编辑: 浏览:(372)

近年来,Go 语言的使用量呈爆炸式增长。似乎每个初创公司都将它用于后端系统。开发人员认为它如此广受欢迎,背后的原因有很多。

我们喜欢 Go 的地方

Go 语言速度非常快

Go 语言是一门非常快速的编程语言。因为 Go 语言是编译成机器码的,因此,它的表现自然会优于那些解释性或具有虚拟运行时的编程语言。Go 程序的编译速度也非常快,并且生成的二进制文件非常小。我们的 API 在短短几秒钟内就编译完毕,生成的可执行文件区区只有 11.5MB 这么小。

易于掌握

与其他语言相比,Go 语言的语法很简单,很容易掌握。你完全可以把 Go 语言的大部分语法记在脑子里,这意味着你并不需要花很多时间来查找东西。Go 语言也非常干净易读。非 Go 语言的程序员,尤其是那些习惯于 C 风格语法的程序员,就可以阅读 Go 程序代码,并且能够理解发生什么事。

静态类型定义语言

Go 语言是一种强大的静态类型定义语言。有基本类型,如 int、byte 和 string。也有结构类型。与任何强类型语言一样,类型系统允许编译器帮助捕获整个类的错误。Go 语言还具有内置的列表和映射类型,而且它们也易于使用。

接口类型

Go 语言有接口类型,任何结构都可以简单地通过实现接口的方法来满足接口。这允许你解耦代码中的依赖项。然后,你可以在测试中模拟你的依赖项。通过使用接口,你可以编写更加模块化的可测试代码。Go 语言还具有头等函数,这使得开发人员以更实用的方式编写代码成为可能。

标准库

Go 语言有一个相当不错的标准库。它提供了方便的内置函数,用于处理基本类型。有些包可以让你轻松构建一个 Web 服务器、处理 I/O、使用加密技术以及操作原始字节。标准库提供的 JSON 序列化和反序列化非常简单。通过使用“tags”,你可以在 struct 字段旁边指定 JSON 字段名。

测试支持

测试支持内置在标准库中,不需要额外的依赖。如果你有个名为 thing.go 的文件,请在另一个名为 thing_test.go 的文件中编写测试,并运行“go test”。Go 就将快速执行这些测试。

静态分析工具

Go 语言的静态分析工具众多且强大。一种特别的工具是 gofmt,它根据 Go 的建议风格对代码进行格式化。这可以规范项目的许多意见,让团队奖经理集中在代码所做的工作上。我们对每个构建运行 gofmt、golint 和 vet,如果发现任何警告的话,则构建将会失败。

垃圾收集

在设计 Go 语言时,有意将内存管理设计得比 C 和 C++ 更容易。动态分配的对象是垃圾收集。Go 语言使指针的使用更加安全,因为它不允许指针运算。还提供了使用值类型的选项。

更容易的并发模型

虽然并发编程从来就不是一件易事,但 Go 语言在并发编程要比其他语言更容易。创建一个名为“goroutine”的轻量级线程,并通过“channel”与它进行通信几乎是非常简单的事情,至于更为复杂的模型,也是有可能能够实现的。

我们不喜欢 Go 的地方

正如我们前面讨论过的,Go 语言确实是一门优秀的语言。它有一个干净的语法,执行速度也很快速。它还有很多优点。但是,编程语言的全部并不仅仅是指它的语法。下面是我们遇到的一些问题。

没有泛型

首先,这个问题就像房间里的大象一样,是显而易见而又被忽略的事实。Go 语言没有泛型。对于来自使用 Java 这样的语言的开发者来说,要转向 Go 语言,这是一个需要克服的巨大障碍。这意味着代码的重用级别降低了。虽然 Go 语言有头等函数,但如果编写“map”、“reduce”和“filter”等函数,将这些函数设计为对一种类型的集合进行操作,就不能将这些函数重用于其他不同的类型集合。要解决这一问题有很多方法,但都最终都要涉及到编写更多的代码,如此一来,生产力和可维护性就降低了。

接口是隐式的

虽然有接口这一点很好,但是结构却是隐式地而非显式地实现接口。这点被称为是 Go 语言的优势之一,但我们发现,很难从结构中看出它是否实现了接口。你只能通过尝试编译程序才能真正了解。如果程序很小,这当然没有什么问题。但如果这个程序是中大型规模,麻烦就大了。

库支持不佳

Go 语言的库支持参差不齐。我们的 API 与 Contentful 集成,但后者并没有官方支持的 Go SDK。这意味着我们必须编写(并维护!)大量代码来请求和解析 Contentful 中的数据。我们还必须依赖第三方的 Elasticsearch 库。由厂商提供的 Go SDK 并不像他们的 Java、Ruby 或 JavaScript 同类产品那样受欢迎。

社区沟通很难

Go 社区可能不会接受建议。在 golint 的 GitHub 存储库中考虑这个问题:https://github.com/golang/lint/issues/65 ,有用户请求 golint 在发现警告时,能够使构建失败(这就是我们在项目中所做的事情)。维护者立即否定了这一想法。但是,由于有太多的人就这个问题发表了评论,一年后,维护者最终不得不增加了所请求的特性。

Go 社区似乎也不喜欢 Web 框架。虽然 Go 语言的 HTTP 库涵盖了很多方面,但它并不支持路径参数、输入检查和验证,也不支持 Web 应用程序中常见的横切关注点。Ruby 开发人员有 Rails,Java 开发人员有 Spring MVC,Python 开发者有 Django。但许多 Go 开发人员选择了避免使用框架。然而现实是,并非没有框架,恰恰相反有很多。但是,一旦你开始将某个框架用于某个项目,要想避免被遗弃的命运几乎是不可能的。

分裂的依赖关系管理

很长一段时间以来,Go 语言没有一个稳定的、正式的包管理器。经过多年的社区乞求,Go 项目最近才发布 godep。在此之前,已经有许多工具填补了这个空白。我们在项目中使用了非常强大的 govendor,但这意味着社区是分裂的,对刚接触 Go 语言的开发人员来说,这可能是非常令人困惑的。此外,几乎所有的包管理器都由 Git 存储库提供支持,Git 存储库的历史可能随时会发生更改。将其与 Maven Central 相比,后者永远不会删除或更改项目所依赖的库。

决定是否使用 Go 语言

有时候,你需要考虑一下机器的情况。你发送和接受字节时。你管理数千个并发进程时。你也有可能正在编写操作系统、容器系统或区块链节点。在这些情况下,很可能你不会关心泛型。因为你忙着从芯片榨取每纳秒的性能。

但是,很多时候,你需要考虑人类。你需要处理的业务领域数据:客户、员工、产品、订单。你需要编写对这些域实体进行操作的业务逻辑,并且需要多年来维护此业务逻辑。并且需要处理不断变化的需求,还要做的越快越好。对于这些情况,开发人员的经验很重要。

Go 语言是一种编程语言,它更重视的是机器时间而不是人类时间。有时候,你的领域中,机器,或者程序性能是最关键的。在这些情况下,Go 可以成为一个很好的 C 或 C++ 替代品。但是,当你编写一个典型的 n 层应用程序时,性能瓶颈通常会出现在数据库中,更重要的是,你将如何对数据建模。

在决定是否使用 Go 语言时,请考虑以下经验法则:

如果你处理的是字节,那么 Go 语言可能是一个不错的选择。

如果你处理的是数据,那么 Go 语言可能不是一个好的选择。

这种情况也许在未来有一天会改变。Go 语言和社区仍然还很年轻。他们可能会给我们带来惊喜,并添加泛型;或者一个流行的 Web 框架会大获全胜。不过,目前我们将坚持使用成熟的编程语言,这些语言具有普遍的支持、成熟的依赖性管理,并专注于业务领域建模。

最新 更多 >
  • 1 2024年比特币会涨到多少钱?

    2024年比特币价格预测比特币(Bitcoin)作为目前最具影响力的加密货币之一,自2009年问世以来经历了许多波动,不断牵动着全球投资者的神经。随着区块链技术的发展和市场逐渐成熟,比特币的价格也成为了人们关注的焦点。那么,让我们来预测一下2024年比特币可能达到的价格。2020-2023年市场趋势回顾在2020年至2023年这段时间里,比特币市场经历了一系列起伏。起初,在2020年,比特币价格在

  • 2 BitF币是什么?

    BitF币是什么?BitF币是一种数字加密货币,它是在去中心化的区块链网络上发行和交易的。BitF币的目标是提供安全、快速和低成本的全球支付解决方案。作为一种加密货币,BitF币具有许多特点,使之在数字货币市场上得到了广泛的关注和认可。区块链技术和BitF币BitF币是基于区块链技术构建的。区块链是一种去中心化的分布式账本,其中的每个交易都被记录在一个被称为“区块”的数据结构中,并通过密码学技术进

  • 3 CATE币是什么币?

    什么是CATE币?CATE币是一种加密货币,全称为Catex Token,它是Catex交易所发行的代币之一。Catex交易所是一个新兴的加密货币交易平台,CATE币是该交易所的官方代币。CATE币的特点CATE币具有以下几个特点: 交易手续费分红:CATE币持有者将会根据持有的币量获得交易手续费的分红,这意味着持有CATE币的用户可以从交易所的交易活动中获得 passively income。

  • 4 加密货币为什么跌了呢

    加密货币为什么跌了呢?近年来,加密货币市场一直备受关注,许多人对其中的热潮感到兴奋。然而,随着时间的推移,人们渐渐开始注意到加密货币价格的下跌。那么,加密货币为什么会跌呢?下面我们将探讨其中的原因。市场波动性加密货币市场的波动性极高,价格往往会在短时间内出现大幅波动。这种波动性可以归因于市场参与者的情绪和市场供需的变化。当市场情绪低迷或投资者对加密货币的信心下降时,市场供应超过了需求,从而导致价格

  • 5 加密货币熊市是什么时候

    加密货币熊市是什么时候?对于数字货币投资者来说,这个问题非常重要。加密货币市场一直以其剧烈的波动性而闻名,投资者经历了多次牛市和熊市的轮回。那么,我们何时可以判断加密货币正在进入熊市呢?本文将从市场趋势、价格走势以及情绪等方面为您解析。1. 市场趋势市场趋势是判断加密货币是否进入熊市的重要指标之一。在熊市中,市场往往呈现出下跌趋势,并出现连续的低点。这通常是由于投资者持续出售数字资产的结果。如果市

  • 6 DOP币是什么币?

    什么是DOP币?随着加密货币的兴起,越来越多的人开始关注并投资于各种不同的数字货币。其中一种备受瞩目的币种是DOP币。DOP币,全名Decentralized Options Protocol(分散式期权协议),是一种去中心化金融(DeFi)平台的代币。DeFi和DOP币在讨论DOP币之前,我们需要了解什么是去中心化金融(DeFi)。DeFi是一种基于区块链技术的金融体系,其目的是通过智能合约和数

  • 7 加密货币是什么函数形式

    加密货币是什么函数形式的加密货币是一种通过使用密码学技术来保障交易安全和实现货币发行与管理的数字货币。它是通过一系列的算法和函数来加密交易信息,并在一个分布式的网络中进行交易验证和记录的。密码学技术加密货币使用密码学技术来确保交易的安全性和匿名性。密码学涉及使用各种算法和函数来加密信息,使其只能由授权的参与者解密和访问。这个技术保证了交易的机密性和数据完整性。分布式网络加密货币的交易是在一个分布式

  • 8 如何在币圈中建立信任和声誉?

    如何在币圈中建立信任和声誉?随着数字货币行业的快速发展,币圈中的竞争也越来越激烈。在这个竞争激烈的环境中,建立信任和声誉变得至关重要。本文将为您介绍一些在币圈中建立信任和声誉的方法。提供透明的信息和真实的数据在币圈中建立信任和声誉的第一步是提供透明的信息和真实的数据。投资者往往会对一个项目的可信度产生怀疑,如果项目方无法提供详细的信息和真实的数据。因此,作为一个项目方,应该尽可能地向投资者展示项目

  • 9 CVP币是什么币?

    什么是CVP币CVP币(CV Protocol)是一种基于区块链技术的数字货币。它是CVP项目的核心代币,被设计用于支持CVP生态系统中的各种功能和用途。CVP币的发行和管理遵循去中心化和自治原则,旨在为用户提供更加安全、透明和公正的交易和服务。CVP币的特点CVP币具有匿名性。由于采用了区块链技术,CVP币的交易记录被记录在公开的区块链账本上,但交易双方的身份信息是加密的,保护了用户的隐私。CV

  • 10 比特币如何转换成其他加密货币?

    比特币如何转换成其他加密货币?在加密货币市场中,比特币是最受欢迎和最具价值的一种数字货币。然而,有时候人们可能想要将比特币转换成其他加密货币,以寻求更多投资机会或开展其他交易。下面将介绍一些转换比特币至其他加密货币的常见方法。使用加密货币交易所加密货币交易所是转换比特币至其他加密货币最常见和便捷的方式。这些交易所提供了一个平台,让用户可以通过买卖加密货币来进行转换。用户可以在交易所上创建账户,将比