1. Go 语言概述和环境搭建

后端语言的发展从未停下脚步,得益于 Go 语言的简洁以及原生并发的特性,Go 语言在 Web 开发,高并发等领域有大量应用,在微服务时代,有必要了解 Go 语言的特性。本章将简单介绍 Go 语言以及如何搭建 Go 语言的开发环境。

1.1. 概述

Go 语言注重大道至简,通过简单的语法专为高并发场景的应用而生。

1.1.1. 起源

一门语言的出现,都是为了解决某个方面的问题,Go 语言也不例外,Go 语言的诞生是为了解决当时 Google 在软件开发中遇到的三大痛点:

  1. 编译慢:复杂的 C++ 项目编译时间过长,严重拖慢开发效率。
  2. 复杂度高:像 C++ 这样的语言为了兼容新特性而变得越来越臃肿和复杂。
  3. 难以适应多核时代:传统语言对并发编程的支持不够友好,无法高效利用多核 CPU 和网络。

为了解决这些问题,三位业界顶尖的工程师——罗伯特·格瑞史莫 (Robert Griesemer)、罗勃·派克 (Rob Pike) 和肯·汤普逊 (Ken Thompson)——于 2007 年 9 月开始设计一门全新的语言。

1.1.2. Go语言的优势

Go 语言的成功,很大程度上归功于其清晰且一以贯之的设计哲学:

  • 大道至简:在设计上坚决“做减法”,语言特性极少(只有25个关键字),强制统一的代码格式,以降低学习成本、提高代码可读性。
  • 原生并发:通过 goroutine(轻量级线程)和 channel(通道)在语言层面提供并发支持,使得编写高并发程序变得非常安全、简单和高效。
  • 组合优于继承:使用结构体(Struct)和接口(Interface)的组合而非复杂的类继承体系,使代码结构更灵活、易于测试和维护。

1.2. 安装

在官网 https://go.dev/ 下载

在 Download 页面,选择对应的平台版本:

下载完,是个安装包,一步步安装即可,安装完后,在控制台输入:

go version

可查看 go 的版本,如果能正确输出,则表明安装成功:

1.3. 第一个程序

每一门语言写的第一个代码都是打印 “Hello World”,这似乎成了一种约定俗成,下面也用 Go 语言实现了打印 “Hello World”,新建一个 “hello.go” 文件,文件内容如下:

package main

import "fmt"

func main() {
    fmt.Println("Hello World")
}

此时,执行 go run hello.go,在控制台就能看到对应的输出 “Hello World”。现在对代码进行分析:

  • package main:声明了 main.go 所在的包,Go 语言中使用包来组织代码。一般一个文件夹即一个包,包内可以暴露类型或方法供其他包使用,这里面的包名为 main。
  • import "fmt":fmt 是 Go 语言的一个标准库/包,用来处理标准输入输出。
  • func main()main() 函数是整个程序的入口,main() 函数所在的包名也必须为 main。
  • fmt.Println(“Hello World!”):调用 fmt 包的 Println() 方法,打印出 “Hello World!”

第一个程序已经写完,但是有几个点需要注意的是:

  1. 每一条语句后面没有 ; 的语句的结束符
  2. main() 函数后的 { 不能写到下一行,这是由编译器决定的
  3. 打印函数 Println() 的首字母大写,这是 Go 语言的可见性决定的

1.4. 本章小结

本章只是简单介绍了 Go 语言的起源以及 Go 语言的优势。Go 语言的兴起也是为解决特定的问题,通过一个简单的例子,让读者从安装环境到跑通第一个 Hello World 的例子。