重学Go语言 | 搭建Go开发环境

800 阅读2分钟

我正在参加「掘金·启航计划」

作为《重学Go语言》的第一篇文章,为了更好地学习Go语言,第一件事当然是来安装一个Go语言开发环境了。

Go安装

Go有两种安装方式:

  • 二进制安装包:Go为各种操作系统与CPU架构编译好的安装包,比如说你用的Windows 64位的操作系统,直接选择对应的安装包进行安装即可。
  • 源码安装:Go是开源项目,因此我们也可以自己下载Go源码进行编译安装。

二进制安装包

如果你是Windows或者Mac操作系统,那么下载对应的安装包后,根据安装界面的提示安装即可,如果是Linux,在下载安装包后,可以先移除旧的go版本,再解压到usr/local目录(其他目录也可以的):

# 移除旧的go版本
$ rm -rf /usr/local/go 
# 将go解压缩到/usr/local目录
$ tar -C /usr/local -xzf go1.19.4.linux-amd64.tar.gz

安装好之后,还需要配置环境变量,主要配置三个环境变量

  • PATH:将Go安装目录下的bin目录配置到PATH环境变量,这样才能在命令行下运行Go相关工具链。
  • GOPATH:这个目录主要是存入我们的代码或者是一些第三方工具的地方。
  • GOROOT:Go的安装目录。
$ export PATH=$PATH:/usr/local/go/bin
$ export GOROOT=/usr/local/go
$ export GOPATH=~/go

这时候就已经安装完成了!在命令行输入下面的命令:

$ go version
go version go1.19.4 darwin/amd64

如果成功输出Go的版本信息,那就说明安装成功了,如果提示无法找到go命令,那么你就要检查刚刚的环境变量配置是否正确了。

源码安装

如果在Go官网上没有找到你对应的平台,亦或者你想定制化地安装Go开发环境,那么你也可以自己编译Go源码进行安装,分以下几个步骤:

  • 准备编译环境
  • 下载源码
  • 编译安装

准备编译环境

Go从1.5开始,就用Go重写了Go的编译器与工具链,实现了自举。

而Go1.5之前的版本,编译器与工具链都是用C写的,也就是说用源码安装Go的话,Go1.5版本之前与之后的安装方式不一样:

  • 1.5之前的版本:本地必须有C语言编译环境,因为此时Go是用C语言写。
  • 1.5及之后的版本:本地必须有Go语言的编译环境,此时Go实现了自举。

目前Go语言的稳定版本是1.19.4,换句话说我们要有Go编译器才能安装Go,主要有四种方式:

  1. 本地已经有安装的Go版本
  2. 交叉编译:在其他电脑编译好Go,再移到你的目标主机上
  3. 使用gccgo:这个是Go语言的编译器。
  4. 使用C语言编译Go1.4版本:Go1.5之前的版本都是用C语言开发的,如果本地有C语言编译工具,编译好Go1.4,再使用Go1.4编译新的版本即可。

下载源码

在安装好了Go的编译环境后,就可以下载Go的源码了:

$ wget https://go.dev/dl/go1.19.4.src.tar.gz
$ tar -xzf go1.19.4.linux-amd64.tar.gz

或者直接克隆Go仓库的源码:

$ git clone https://go.googlesource.com/go goroot
$ cd goroot
$ git checkout <tag>

编译安装

$ cd go/src
$ ./all.bash

编译成功后,与使用二进制安装一样,也要配置环境变量,具体配置方式参考上面。

Hello World

接下来,我们通过一段在控制台输出Hello World的代码,将下面的代码保存到名为main.go文件中。

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

运行

$ go run main.go
Hello World

接下来我们分析一下这个简单的程序:

第一行:package关键词用于定义包名,在这里包名main,这是main函数所在的包,也是Go语言程序运行的入口。

第二行:import关键词用于导入标准库,这里导入的标准库为fmtfmt是Go内置的用于在控制台输出信息的库。

第三行和第五行:func关键词用于定义函数,这里定义了程序的入口main函数,Go语言与C语言类似,都是从main函数开始的。

第四行:函数体,主要的执行逻辑都在这里。

小结

其实,一般而言我们只要选择Go官网提供的二进制安装即可,并不需要进行源码安装,不过多了解一种Go的安装方式也不是什么坏事吧!