Go语言编程基础

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

近年来,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 btm是什么数字货币

    BTM是什么数字货币?BTM(Bytom)是一种基于区块链技术的数字货币,该数字货币的目标是实现资产的数字化和交易的智能化。BTM的区块链技术采用了一种名为Tensority的共识算法,这是一种集证明权益和Proof of Work的混合算法。这个算法旨在提高系统的安全性和稳定性,并提供高效的数字货币交易和智能合约功能。BTM的设计目的是为了提供更快、更便捷的资产数字化和交易体验。通过BTM,用户

  • 2 LUXO币值多少钱一枚

    LUXO币是一种虚拟货币,也是加密货币市场中的新星。它由一群具有丰富经验的区块链专家和金融科技从业者共同创建而成。LUXO币的创新之处在于其独特的技术架构和广泛应用的场景,使得其在市场上有着巨大的潜力。那么LUXO币目前的价值是多少呢?根据最新的市场数据显示,LUXO币的价格正在不断上涨。从过去一年的数据来看,LUXO币的价格几乎翻了一番。这一增长趋势显示了市场对LUXO币的认可和投资者对其前景的

  • 3 MIT币有风险吗

    近年来,随着加密货币市场的快速发展,越来越多的人开始关注和投资数字货币。其中,MIT币作为一种新兴的加密货币,备受关注。然而,就像任何投资一样,MIT币也存在着一定的风险。首先,MIT币市场波动性非常大。由于加密货币市场本身的特殊性,价格常常出现大幅度波动。投资者可能会面临MIT币价格的急剧下跌,导致投资损失。这主要源于市场供需关系的变化,以及全球政治、经济环境的变动等多种因素的综合影响。其次,M

  • 4 LIQ币有希望吗

    近年来,随着区块链技术的快速发展,各种数字货币如雨后春笋般涌现而出。在这些众多的数字货币中,有一种名为LIQ的虚拟币备受关注。那么,LIQ币到底有没有希望呢?让我们一起来探讨一下!首先,我们需要了解LIQ币是什么。LIQ币是一种基于区块链技术的虚拟货币,它采用了先进的加密算法和分布式账本技术,确保了交易的安全性和匿名性。此外,LIQ币还具有快速的交易确认和低廉的交易费用等优势。其次,我们可以从市场

  • 5 MMUI币有希望吗

    随着区块链技术的迅猛发展,加密货币市场也变得愈发繁荣。在众多数字货币中,MMUI币作为一种新兴的币种备受关注。那么,MMUI币有希望吗?这是很多投资者和爱好者都关心的问题。首先,我们需要了解MMUI币的特点和潜力。MMUI币是一种基于区块链技术发行的数字货币,它通过智能合约实现安全、快速的交易。与传统货币相比,MMUI币的优势在于其去中心化、匿名性和不可篡改性。这些特点为其成为未来数字经济的有力支

  • 6 区块链bsn数字货币怎么用

    区块链 BSN 数字货币如何使用区块链人工智能服务网络(Blockchain-based Service Network,简称 BSN)是一个面向个人和企业的开放云服务平台,旨在为开发人员提供简化区块链应用程序搭建的工具和资源。BSN 还支持数字货币的使用,允许用户进行安全、透明和去中心化的交易。1. 创建数字货币钱包首先,你需要在BSN平台上创建一个数字货币钱包。打开BSN的官方网站,在注册页面

  • 7 xlmbear是什么数字货币

    介绍xlmbear数字货币xlmbear是一种新兴的数字货币,它基于最先进的区块链技术,并且旨在提供快速、安全、高效的支付网络。作为一种去中心化的加密货币,xlmbear具有许多优势,如低手续费和无边界交易。本文将介绍xlmbear数字货币的背景、特点和对未来的潜力。1. 背景xlmbear数字货币是在区块链技术爆发的背景下诞生的。区块链技术的核心是去中心化的分布式账本,它能够确保交易的透明性和安

  • 8 MARK币值多少钱一枚

    MARK币是一种加密货币,它在数字货币市场中受到了广泛的关注。作为一种新兴的数字资产,MARK币的价格波动引起了许多投资者的兴趣。那么,MARK币究竟值多少钱一枚呢?让我们来一探究竟。首先,需要了解的是,MARK币的价格是根据市场供需关系决定的。供应量的变动和投资者的情绪波动都会对MARK币的价格产生影响。因此,MARK币的价格可能会随时发生变化。根据目前的市场情况,MARK币的价格在一天之内可能

  • 9 gdc数字货币怎么样

    探讨GDC数字货币的特点和优势随着区块链技术的不断发展和数字货币市场的不断增长,GDC数字货币作为一种新兴的加密货币,备受关注。它拥有独特的特点和众多的优势,为用户提供了更安全、更高效、更便捷的数字资产交易和管理方式。1. 基于区块链技术的安全性GDC数字货币基于区块链技术的设计和开发,具备了极高的安全性。所有交易和转账都被记录在不可篡改的区块链上,并经过多节点共识验证,确保交易的真实性和安全性。

  • 10 LUSD币有希望吗

    LUSD币是一种相对较新的加密货币,虽然市场上有许多类似的数字资产,但LUSD币的独特性和前景广阔使其备受关注。在全球范围内,越来越多的交易者开始关注LUSD币,并期待它能够成为一种有希望的加密货币。首先,LUSD币具有极低的交易费用和高度的安全性。与传统金融机构相比,使用LUSD币进行交易可以大大减少中间商和银行等中介的参与。交易者可以更加高效地完成转账和支付,并且LUSD币的区块链技术保证了交