文章目录
Golang的背景知识
Golang的发展历程
Golang的核心开发团队
Go语言(又称Golang)是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,由罗伯特·格瑞史莫(Robert Griesemer)、罗布·派克(Rob Pike)及肯·汤普森(Ken Thompson)于2007年9月开始设计。

Golang的发展历程
Go语言发展历程如下:
- 2007年9月:Go项目作为Google的一个内部项目开始开发,初衷是创建一门简洁、高效、并发的编程语言。
- 2009年11月:Go语言的第一个正式版本,以开放源代码的方式向全球发布。
- 2012年3月:Go 1.0正式发布,这是Go语言的第一个稳定版本。
- 2016年8月:Go 1.7发布,引入了新的上下文(context)包,用于处理并发任务的取消和超时。
- 2017年2月:Go 1.8发布,引入了对HTTP/2协议的原生支持、新的测试功能和改进的性能。
- 2017年8月:Go 1.9发布,引入了一些小的语言和工具的改进,并对垃圾回收机制进行了优化。
- 2018年2月:Go 1.10发布,该版本带来了更快的编译速度,对WebAssembly的支持和一些语言特性的改进。
- 2018年8月:Go 1.11发布,引入了Go Modules,这时Go语言的官方依赖管理解决方案,用于管理项目的依赖关系。
- 2019年2月:Go 1.12发布,改进了性能和稳定性,包括对垃圾回收器和调度器的优化。
- …
- 2024年2月:Go 1.22发布,这是目前Go的最新版本。
说明一下: 目前Go每半年发布一个二级版本(即从a.x升级到a.y),各个版本详细的更新内容可以在Go官方网站查看。
Golang的特点
Golang的特点
Go语言主要的特点如下:
- 简洁易学: Go语言的语法简洁明了,摒弃了一些繁琐的特性和语法元素,使得代码更易于阅读和维护。这使得Go语言成为一门学习曲线较为平缓的编程语言,即使是没有编程经验的人也能相对轻松地上手。
- 高并发性能: Go语言天生支持并发编程,通过goroutine和channel机制,使得并发编程变得更加简单和安全。开发者可以轻松的利用goroutine来实现并发操作,而无需手动挂历线程和锁,这种并发模型在处理大量请求和高并发场景下特别有优势。
- 内存安全和垃圾回收: Go语言拥有垃圾回收机制,开发者无需手动管理内存分配和回收,大大减轻了编程的负担,同时也有助于防止内存泄漏。
- 强大的标准库: Go语言拥有丰富的标准库,覆盖了网络、文件处理、加密、并发等方面,开发者可以直接利用这些库来实现各种功能,而无需重新编写重复的代码,减少了开发时间和工作量,同时也提高了代码的可维护性。
- 跨平台支持: Go语言支持跨平台开发,可以在多个操作系统上进行编译和运行。开发者可以直接在自己的机器上编译出可执行文件,然后将其部署到不同的操作系统上,而无需进行额外的修改,这种跨平台能力为软件开发人员提供了灵活性和便利性。
- 静态类型语言: Go语言是一门静态类型的编程语言,这意味着在编译期间就能捕获到一些类型相关的错误,这有助于提取发现潜在的bug,减少在运行时可能出现的错误。
- 强调并遵循软件工程原则: Go语言鼓励开发者编写清晰、简介、可维护的代码,它有一套明确的代码风格规范,并自带了一些工具来帮助开发者保持一致的代码风格。
- 丰富的生态系统: Go语言的社区非常活跃,有着庞大的开发者群体,社区中不断推出新的开源项目和工具,这意味着开发者可以轻松地获取到丰富的资源和文档,解决问题变得的更加便捷。
Golang的应用领域
Golang的应用领域
Go语言目前主要的应用领域如下:
- 后端开发: Go语言的并发性能额高效的网络编程使其成为构建高性能、可扩展的后端服务的理想选择,许多Web应用、RESTful API服务、微服务架构都广泛使用Go语言进行开发。
- 云计算和分布式系统: Go语言的并发模型和轻量级线程(goroutine)机制使得它在构建云计算和分布式系统方面表现出色,许多云服务提供商和分布式系统都采用Go语言编写,如Docker、Kubernetes等。
- 数据库和存储系统: Go语言优秀的并发性能使它适用于构建高性能的数据库和存储系统,许多数据库和存储系统都采用Go语言进行开发,如etcd、BoltDB等。
- 嵌入式系统: 尽管Go语言是一门高级编程语言,但其高效的编译速度和小巧的二进制文件,使得它在嵌入式系统领域也有所应用。Go语言可以用于编写一些轻量级的嵌入式系统和物联网设备。
- DevOps工具: 由于Go语言的高效编译和跨平台特性,使得它在开发和运维工具方面也得到广泛应用,许多DevOps工具都是用Go语言编写的,如Terraform、Prometheus等。
开发环境搭建
下载并安装SDK包
下载SDK包
搭建Go开发环境,首先需要在Go官方网站下载Go的软件开发工具包(Software Development Kit,SDK)。如下:

点击Download按钮后,根据自己的环境选择对应的SDK安装包下载即可。这里我下载的是Windows操作系统下Go 1.20版本的开发包。如下:

开发包选择说明:
- Mac操作系统:选择文件名中包含darwin的开发包。
- Unix操作系统:选择文件名中包含freebsd的开发包。
- Linux操作系统:选择文件名中包含Linux的开发包。
- Windows操作系统:选择文件名中包含Windows的开发包。
- 32位操作系统:选择文件名中包含386的开发包。
- 64位操作系统:选择文件名中包含amd64的开发包。
- 图形化安装包:Windows操作系统选择文件名后缀为.msi的开发包,Mac操作系统选择文件名后缀为.pkg的开发包。
- 解压即使用安装包:Windows操作系统选择文件名后缀为.zip的开发包,其他操作系统选择文件名后缀为.tar.gz的开发包。
注:gox.xx.src.tar.gz中存放的是对应版本的Go源代码。
安装SDK包
由于我下载的是解压即使用类型的安装包,因此只需将文件解压即可,解压后即可得到Go语言的编译器、标准库以及其他相关工具和文件的源代码。如下:

设置环境变量
设置环境变量
安装完Go的开发包后,需要设置如下三个环境变量:
- GOROOT:设置为Go开发包的安装路径。
- GOPATH:设置为将来开发Go项目的路径。
- PATH:添加Go开发包中bin目录的路径。
GOROOT的作用
在Go开发包的src目录中是Go标准库的源代码,其中每一个目录对应一个包,包名与目录名相同,比如fmt目录中存放的就是fmt包相关的源代码。如下:

GOROOT的作用:
- 在编写Go程序的过程中要使用标准库,需要通过import关键字指定包名进行引入。
- 编译器在编译Go程序时,会自动在GOROOT下的src目录中找到对应的标准库包。
- 如果没有正确设置GOROOT环境变量,那么在编译Go程序时就会报错
cannot find package。
GOPATH的作用
GOPATH的作用:
- 在编写Go程序时,为了提高程序的可维护性和可读性,我们会将代码以包的形式进行划分,形成独立的功能模块或库,通过import关键字同样可以引入我们自己创建的包。
- 编译器在编译Go程序时,如果在GOROOT下的src目录中找不到import的包,那么会继续在GOPATH下的src目录中寻找。
- 如果没有正确设置GOPATH环境变量,并且在Go程序中引用了自己创建的包,那么在编译Go程序时同样会报错
cannot find package。
PATH的作用
PATH的作用:
- PATH环境变量用于指定系统可执行文件的搜索路径,我们之所以能够在命令行中执行cmd命令,是因为这些命令对应的可执行文件所在的目录都被添加到了PATH环境变量中。
- Go开发包中的bin目录下存放的就是常用的Go相关的命令和工具,为了能够在任意路径下执行这些命令,因此需要将该目录添加到PATH环境变量中。
Go开发包中的bin目录下的可执行文件如下(不同Go版本可能不同):

go命令提供了编译、构建、运行和测试Go程序的功能,通过go version命令可以查看当前的Go版本。如下:

gofmt命令用于格式化Go源代码,使其符合Go语言规范的格式。如下:

gofmt命令默认只会将格式化后的内容输出,如果需要将格式化后的内容写入文件,需要携带-w选项。如下:

特别注意: Go语言中的左大括号不能单独新起一行,否则会导致编译报错。
Go项目目录结构
Go项目目录结构
Go项目的目录结构没有固定的标准,作为Go初学者,可以使用下面这个简单的目录结构来组织项目。如下:

说明一下:
- src目录用于存放Go源代码,bin目录用于存放生成的可执行文件,config目录用于存放项目的配置文件。
- 考虑到项目可能用到第三方库,而go get命令下载的第三方库是放在GOPATH的src目录下的,比如在github下载的第三方库代码,会存放在src目录下的github.com目录中。为了更好的管理项目代码,可以在src目录下创建一个go_code目录,将项目代码统一放在go_code目录下。
- 对于每一个Go项目来说,如果项目比较庞大,可以在project目录下按包创建多个子目录存放项目代码,如果项目比较简单,也可以直接在project目录下创建一个go文件。
- Go项目目录结构中的src目录名不能改为其他名字,因为Go项目引入非标准库包时,固定是在GOPATH的src目录下找的。在通过import关键字指定引入非标准库包时,只需要从src开始(不包含src)指明包目录的路径即可。
Hello World程序
本篇博客介绍Golang的一些入门知识,于是我在go_code目录下创建了BasicKnowledge目录,用于存放本篇博客的所有代码,并在BasicKnowledge目录下创建了一个HelloWorld目录,用于编写Hello World程序。目录结构如下:

在HelloWorld目录下创建一个main.go文件,并在文件中编写Hello World代码。如下:
package main
import "fmt"
func main() {
fmt.Pr

最低0.47元/天 解锁文章
6125





