Go,也称为 Golang 或 Go 语言,是Google 开发的一种开源编程语言。软件开发人员在一系列操作系统和框架中使用 Go 来开发 Web 应用程序、云和网络服务以及其他类型的软件。
Go 是静态类型的、显式的,并且是在C编程语言之后建模的。由于 Go 语言的快速启动时间、低运行时开销以及无需虚拟机 ( VM ) 即可运行的能力,它已成为一种非常流行的用于编写微服务和其他用途的语言。此外,Go 还用于并发编程——一种一次无序或部分顺序执行多个任务的策略。
Go 语言的灵感来自Python的生产力和相对简单性。它使用 goroutines 或轻量级进程,以及一组包来进行高效的依赖管理。它旨在解决几个问题,包括缓慢的构建时间、不受控制的依赖性、重复工作、难以编写自动工具和跨语言开发。
Google 创建 Go 是为了解决自己的软件工程问题,并提供C++的替代方案。此外,随着多核处理器变得越来越流行,当时需要一种具有更高生产力水平的语言。
Google 于 2007 年开始设计 Go。Go 开发人员希望创建一种更易于使用的编程语言,但仍具有其他语言(如 C++、Python 和JavaScript)所具有的有用特性。Go 于 2009 年作为一个开源项目被宣布,社区成员可以在其中就想法和代码进行协作。1.0 版随后于 2012 年发布。
多年来,增加了新的更新和功能,例如 2022 年的泛型。Go 的受欢迎程度持续增长,因为它被谷歌、Cloudflare、Dropbox、MongoDB、Netflix、SoundCloud、Twitch 和 Uber 等知名公司使用.
Go 编程语言有什么作用?
Go 团队利用该语言的特性来开发软件:
- 标准库基于分布式包的使用,可以轻松地在代码中添加和使用附加功能。
- 代码包管理允许管理用户创建的和外部代码包,并允许使用一小组命令发布包。
- 静态类型提供了一种类型系统,可确保转换和兼容性,同时避免动态类型语言带来的问题。
- 对测试的支持包括与编写的代码并行运行并允许调试和质量保证的单元测试。
- 平台独立性利用 Go 的模块化设计使其代码几乎可以在任何平台上编译。
- 并发模型基于行为类似于线程的轻量级 goroutines 和促进 goroutines 之间通信的通道机制。代码的语法模仿了动态语言中常用的基本模式,并且支持组合接口而不是继承。这使开发人员能够编写可以同时执行多项任务的程序。
以下是 Go 的一些工具:
- Gofmt自动格式化和缩进代码以提高可读性。
- Go run同时编译和运行代码。
- Go get与GitHub集成。
- Godoc根据代码结构和开发者注释生成基于超文本标记语言的文档。
- Go test运行单元测试和基准测试,启用代码测试和性能数据的收集。
- Go build将 Go 包和依赖项编译成可执行库。
- Go vet检查 Go源代码中的错误和可疑结构。
围棋的好处
使用 Go 的好处包括:
- 快速的编译和执行速度;
- 不需要虚拟机;
- 可移植性;
- 并发性;
- 接口支持松散耦合的系统;
- 自动垃圾收集;
- 内存安全;
- 独立的错误处理;和
- 广泛的内置库。
围棋的局限性
Go 确实有一些缺点,例如:
- 尽管增加了泛型,仍然专注于简单、可读的代码,而不是抽象的、隐式的代码;
- 缺乏运行时安全;
- 执行严格的规则;
- 与函数重载不兼容;和
- 不是传统上面向对象的。
围棋有什么用?
软件开发团队使用 Go 来创建各种软件应用程序:
- 集装箱服务。Docker和Kubernetes等容器服务使用 Go 来实现并发性和可移植性。
- 网络和云服务。Go 的并发特性以及工具和 API 生态系统使其非常适合网络服务、分布式函数和云服务。例如,OpenShift 和 Terraform 等云服务使用 Go 来创建 API 和高性能 Web 服务器。比特币的闪电网络和其他复杂的区块链技术使用围棋。
- 网页服务。Go 的标准库中内置的超文本传输协议服务器使其对 Netflix 和 Twitch 等公司开发 Web 服务和服务器端架构非常有用。
- 命令行实用程序。Terraform 和 OpenShift 等公司利用 Go 的简单语法、短运行时间、开源代码包和相对庞大的标准库来创建命令行界面。
- 公用事业。Go 程序启动迅速,并且由于其最少的编译而可以轻松地重新分发。这使得 Go 非常适合创建工具,例如像 Teleport 这样的访问服务器。
- 微服务。Go 语言的快速启动时间、低运行时开销以及无需 VM 即可运行的能力使其在编写微服务方面非常受欢迎。Uber 和 BBC 等公司将其用于此目的。
- 数据科学。Go 的并发性和内存管理使其成为数据科学家并行处理和分析大型数据集的不错选择。Go 及其库也可用于机器学习,以开发预测模型和执行其他任务。
Go 与其他编程语言相比如何?
Golang 具有与其他编程语言类似的特性,但它提供了一个独特的替代方案:Go 的主要设计目标是促进快速编译,这与其他一些通用语言不同。
C++
Go 和 C++ 有一些关键的区别,例如:
- Go 减少了运行时错误和依赖项的数量,同时提高了内存安全性和内存管理。C++ 不会做所有这些,因为它使用手动内存管理。
- Go 使用比 C++ 更简单、更现代的语法。
- Go 使得编写并发和并行代码变得更加容易,因为它通过 goroutines 和通道内置了对并发的支持,这与依赖线程和锁的 C++ 不同。
- Go 的标准库比 C++ 小。
红宝石
Go 与Ruby的主要区别如下:
- Go 使用比 Ruby 更简单的语法。
- Go 使用静态类型系统来帮助捕获编译期间的错误;Ruby 需要解释器来编译和运行代码,这意味着编译可能需要更长的时间。
- Go 使用内置的并发性,而 Ruby 依赖于线程和锁,这使得 Go 更适合并发代码。
- Go 的标准库比 Ruby 小。
和Java比较
Go 和Java 的主要区别如下:
- Go 使用比 Java 更简单的语法。
- Go 的运行时和编译速度通常比 Java 快,Java 需要 VM 来运行其代码。
- Go 使用内置的并发性,而 Java 依赖于线程和锁。
- Go 的标准库比 Java 小。
学习 Go 编程语言
众所周知,Go 对于初学者来说简单易学。极客事纪提供学习 Go 的资源,例如交互式教程、Go 之旅、指南和解释文章。在其主页上提供了 Go 的演示,潜在用户可以在这里试用。
学习 Go 的最佳方法之一是通过其官方 Go 教程。这些教程涵盖了该语言的基础知识,让初学者可以按照说明执行 Go 代码。用户可以在学习教程的同时参考Go的官方文档,实时学习概念并将所学知识应用于教程中的挑战。
程序员还可以尝试自己的小型 Go 项目,并参与在线 Go 社区来学习这门语言。在线社区包括博客、YouTube 视频和 Reddit 等网站上的活跃用户。