Go 语言介绍

Go 语言简单介绍

Posted by zhouqian on Tuesday, May 17, 2022

Go 语言简介

Go 语言是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

Go 语言优势

可以用作构建快速、可靠、高效的规模化软件,并且具有如下四点优势:

  1. 易于学习和入门
  2. 快速编译,高效执行
  3. 内置并发
  4. 强大的跨平台部署能力

易于学习和入门

Go 语言和 C/C++ 一样同属 C 系,但 Go 语言在极大程度上简化了 C/C++ 语法, 使得 Go 在效率上几乎与 C/C++ 一样高效,语法上几乎同 Ruby、Python 之类的语言一样简单。

快速编译,高效执行

在使用 Java 或其他基于 JVM 的语言编译项目、构建应用程序时, 代码会先被编译为能被 JVM 或运行在底层操作系统之上的其他虚拟机可以理解的字节码。 在程序执行时,Virtual Machines 解释这些字节码并将它们转换为处理器可以理解的二进制文件。

但如 Go、C/C++ 之类的语言无需通过 VM 执行,从执行周期中删除了一个步骤,它直接将代码编译为二进制文件,提高了性能。

并且 Go 提供了一种用于软件构建的模型,该模型使依赖关系分析变得容易, 并避免了 C 样式包含文件和库的大量开销。

内置并发

Go 中倡导使用的 CSP(communicating sequential processes)通信顺序进程模型, 其核心思想是 不要以共享内存的方式来通信,而是要通过通信来共享内存

CSP 中并发实体是独立的,它们之间没有共享的内存空间。并发实体之间的数据交换通过通道实现,无论在通道中放数据还是从通道中取数据, 都会导致并发实体的阻塞,直到通道中的数据被取出或者通道中被放入新的数据,并发实体通过这种方式实现同步。

Go语言的并发基于 goroutine(一种虚拟线程),在程序运行时会参与调度 goroutine, 并将 goroutine 合理地分配到每个 CPU 中,最大限度地使用 CPU 性能。

多个 goroutine 中,Go语言使用 channel(内置通道)进行通信,可以让用户在不同的 goroutine 之间同步发送具有类型的消息。 这让编程模型更倾向于在 goroutine 之间发送消息,而不是让多个 goroutine 争夺同一个数据的使用权。

强大的跨平台部署能力

Go 可以直接编译成二进制机器码运行,并且支持十四种不同类型的操作系统的交叉编译。

❯ go tool dist list
aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/amd64
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
ios/amd64
ios/arm64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
openbsd/mips64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm
windows/arm64

Go 语言使用案例

得益于 Go 语言的种种优势,使得 Go 语言在如下四个方向有着更好的发展:

  1. 云和网络服务
  2. 命令行程序
  3. Web 编程
  4. 开发运营和站点可靠性工程

云和网络服务

Go 的创建正是为了满足这些扩展应用程序、微服务和云开发的并发需求。

事实上,云原生计算基金会(CNCF)中超过 75% 的项目都是用 Go 编写的。 得益于 Go 的快速构建,高效执行,其可以在 pay-as-you-go 和 serverless deployments 中运行成本更低。

并且Go 提供标准惯用 API,并内置并发性以利用多核处理器,使得 Go 在性能和生产力之间取得了很好的平衡。

命令行程序

Go 可以快速地编译程序成单个二进制文件,以一致的风格跨平台工作,并带来强大的开发社区。 Go 编写的程序目前可以在任何系统上运行,而不需要任何现有的库、运行时或依赖项。

Web 编程

Go 出色的跨平台部署能力搭配上其开箱即用的特性使得 Go 可以快速且可扩展的对 Web 应用程序提供支持。

开发运营和站点可靠性工程

凭借快速的构建时间、精益的语法、自动格式化程序和文档生成器,Go 可以非常好的支持 DevOps 和 SRE。

参考