首页 > 编程笔记 > Go语言笔记 阅读:15

Go语言是做什么的(新手必看)

Go 语言的主要设计者有 3 个人,他们都是计算机科学领域的杰出人物,即肯·汤普森(Ken Thompson)、罗伯·派克(Rob Pike)和罗伯特·格利茨默(Robert Griesemer)。为了避开在 C++ 开发中等待编译完成的过程,并满足谷歌的需求,他们凭借各自的经验和智慧,耗时两年设计出 Go 语言,并让 Go 语言具备了动态语言的便利性。

Go 语言(又称 Golang)起源于 2007 年,正式对外发布于 2009 年。开发 Go 语言是为了在不损失应用程序性能的前提下降低代码的复杂性。

Go 语言是类 C语言,而且是经过重大改进的类 C语言。Go 语言继承了 C语言的表达式、基础数据类型、调用参数传值、指针等。

此外,Go 语言具有很好的编译后机器码的运行效率,并且它有与现有操作系统的无缝适配等特性。使用 Go语言不仅能够访问底层操作系统,还能够进行网络编程和并发编程。

为什么要学习Go语言

Go 语言没有类和继承的概念,这与 Java 或 C++ 不同。此外,Go 语言具备清晰易懂的轻量级类型系统,使其在类型之间没有层级关系。这是因为设计者在设计 Go语言时,同时借鉴了 Pascal 语言、Oberon 语言和 C语言,并取其精华。因此,Go 语言是一门混合型的编程语言。

Go 语言不仅具有 Python 等动态语言的开发速度,而且具备 C、C++ 等编译型语言的性能和安全性,还具备“部署简单、并发性良好、语言设计良好、执行性能好”等优势。

在 Go 语言正式对外发布之前,如果需要编写系统程序或者网络程序,那么开发者经常面临这样一个问题:是使用执行效率高、编译速度较慢的 C++,还是使用编译速度快、执行效率较低的 .NET 或者 Java,抑或是使用一门开发难度低、执行效率一般的动态编程语言呢?

在 Go 语言正式对外发布之后,开发者发现 Go 语言能够在编译速度、执行效率和开发难度上找到很好的平衡点,进而达到“快速编译,高效执行,易于开发”的目的。

Go 语言使用自带的编译器编译代码。编译器将源代码编译成二进制(或字节码)格式;在编译代码时,编译器检查错误、优化性能并输出可在不同平台上运行的二进制文件。

Go 语言支持交叉编译,例如,在 Linux 系统的计算机上使用 Go 语言能够开发可以在 Windows 系统的计算机上运行的应用程序。这使得 Go 语言成为一门跨系统平台的编程语言。

Go语言的特性

明确 Go语言的设计初衷后,下面具体介绍 Go语言的主要特性。

1) 语法简单

Go 语言的语法规则严谨,没有歧义,没有变异用法,这使每位开发者编写的代码都大致相同,让应用程序具有良好的可维护性。

2) 并发模型

Go 语言从根本上让一切都并发化。在运行 Go 语言应用程序时,使用 goroutine 运行一切。

goroutine 是 Go 语言的重要特征。goroutine 让 G o语言通过语法实现并发编程变得更容易,无须处理回调,而且不用关注线程切换。

3) 内存分配

将一切并发化带来一个难题:如何实现高并发下的内存分配和管理,为此,Go 语言使用为并发而设计的高性能内存分配组件 tcmalloc。

4) 标准库

Go 语言标准库极其丰富,在不借助第三方扩展插件的情况下,能够完成大部分基础功能的开发工作。

此外,Go 语言还拥有许多优秀的第三方资源,这让 Go 语言从近年来几门新出现的编程语言中脱颖而出。

5) 工具链

完整的工具链对于日常开发极为重要。Go 语言无论是在编译、格式化、错误检查、帮助文档等方面,还是在第三方包下载、更新等方面都有对应的工具。

Go语言与并发

早期的 CPU 都是以单核的形式顺序执行机器指令的。顺序是指所有的指令都以串行的方式执行,在同一时刻有且仅有一个 CPU 在执行机器指令。随着处理器由单核时代向多核时代发展,编程语言也逐步向并发的方向发展。

Go 语言就是在时代发展的背景下产生的支持并发的一门编程语言。Go 语言从底层原生支持并发,开发者无须使用第三方库就能够轻松地在编写程序时分配 CPU 资源。

Go 语言是在 goroutine 的基础上实现并发的。goroutine 被视为一种虚拟线程,但 goroutine 不是线程。Go 语言在运行应用程序时会参与调度 goroutine,把 goroutine 合理地分配给每个 CPU,进而最大限度地使用 CPU。

在多个 goroutine 之间,Go 语言使用通道(channel)进行通信(通道是一种内置的数据结构)。也就是说,Go 语言使用通道能够在不同的 goroutine 之间同步发送消息。

如果把并发设计为生产者和消费者的模式,那么就要把在不同 goroutine 之间同步发送的消息放入通道,把并发设计为生产者和消费者的模式如下图所示。


图 1 把并发设计为生产者和消费者的模式

Go语言的应用

Go 语言从发布 1.0 版本以来,因其简单、高效、并发的特性受到广大开发者的关注,进而被广泛使用。

鉴于 Go 语言的设计初衷和特性,其主要应用领域如下:

相关文章