Quickstart

快速入门

本节目标

  • Go 安装
  • 开发环境搭建,了解 GOROOT 与 GOROOT 作用
  • 编写第一个 Go 程序,了解 go rungo buildgo install 命令
  • 安装并配置自己的开发工具

安装 Go

打开 https://golang.org/dl/ 根据自己的系统版本,下载并安装 Go

选择适合你系统的 Go

下载后,(Window 和 MacOS 系统)点击打开,下一步、下一步看到如下图提示,便是安装完成了。

安装成功

MacOS 下会将 Go 软件包,默认被安装到 /usr/local/go 目录下,并且会自动将 /usr/local/go/bin 目录,添加到你的环境变量 PATH 中,当然 Mac 下你也可以通过 brew 的方式进行安装(不再介绍)。

Windows 下,默认被安装到 c:\Go,且 c:\Go\bin 目录将被添加到环境变量 PATH 中。

因为软件包已经帮你添加好了(PATH)环境变量,所以你需要关闭终端,重新打开终端(Windows 下 cmd),即可在终端的任意目录位置下使用 go 命令。

# 查看当前 Go 版本
(base) ➜  ~ go version
go version go1.14.4 darwin/amd64

# 查看当前环境变量 PATH
(base) ➜  ~ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin

开发环境

如果你之前接触过 Go,想必你已经多多少少知道,在 Go 下存在GOPATHGOROOT这两个环境变量,起初刚接触时这俩变量给我搞的也是略有淡淡的忧伤,在1.8版本(含)后 GOPATH 不再是必选设置,如果没有设置将使用默认值。

  • Unix 上默认值为 $HOME/go
  • Windows 上默认值为 %USERPROFILE%/go

你可以使用 go env 命令,查看相关配置:

(base) ➜  ~ go env
GO111MODULE="on"
GOARCH="amd64"
...
...
GOPATH="/Users/bing/go"
GOROOT="/usr/local/go"

通过上面我们看到我们已经知道,GOPATH 与 GOROOT 的位置了,那么这俩是干啥的呢?

GOROOT 是 Go 的安装目录,你要日后要用的 gogofmt(格式化代码,统一代码风格) 命令都将来自于 GOROOT,以下我列出其一级目录:

# GOROOT 的一级目录
(base) ➜  ~ tree -L 1 -d /usr/local/go
/usr/local/go
├── api
├── bin
├── doc
├── lib
├── misc
├── pkg
├── src
└── test

GOPATH 是你的工作空间,也就是项目的工程目录(说白了就是写代码的地方),他可以在任何位置,但是不能和 GOROOT 相同

因为 Go 已经默认设置我的 GOPATH 为 /Users/bing/go,理论上我可以再这个目录下编写项目代码,为不增加入门学习难度,我将自定义 GOPATH 放在 扩展知识

在 GOPATH 下创建一个工程项目,一般包含三个子目录分别是 srcpkgbin(约定俗成),

  • src 目录:存放 Go 的源文件(自行创建)
  • pkg 目录:编译后生成的包文件(自动生成)
  • bin 目录:编译后生成的可执行文件(自动生成)。

pkg 和 bin 目录,是使用 go 工具构建源码包时,自动生成的目录,并将其生成的二进制文件安装到其中,因为不需要我们手动创建,所以知晓便是。

接下来我们以示例演示。

Hello world

接下来我以示例项目(名:gobing.io)为例,下创建如下目录:

(base) ➜  go tree /Users/bing/go
/Users/bing/go
└── src
    └── gobing.io
        └── ch1
            └── hello.go

国际惯例 hello.go,中以输出 Hello world 为例:

// gobing.io/ch1/hello.go
package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}
  • package main 声明一个 main 包,表示代码所在的模块(包)
  • import "fmt" 导入一个 fmt 包,引入需要到依赖
  • func main() 方法,main 包下的 main 方法表示代码执行的入口

切到 GOPATH 目录,所在的 gobing.io 项目下:

(base) ➜  gobing.io pwd
/Users/bing/go/src/gobing.io

# go build 编译出执行文件
(base) ➜  gobing.io go build ch1/hello.go
(base) ➜  gobing.io ls
ch1   hello
# 运行可执行文件
(base) ➜  gobing.io ./hello
hello, world

这种方式是通过 build 编译出二进制可执行文件,然后再运行。一般是将可执行文件放到生产服务器然后执行,对外提供服务(不适用于开发阶段)。

# go run 直接运行代码(等同于=编译+执行,但不产出二进制文件)
(base) ➜  gobing.io go run ch1/hello.go
hello, world

这是方式一般用于开发阶段,我们看看代码的执行结果,但是你每次更改完代码都得重新执行 go run,很是麻烦,莫急莫急后面我再分享如何做到热更新(修改代码后自动编译)。

# go install 编译并安装到 GOPATH/bin 目录下(如果是引用库,则安装在 pkg 目录下)
(base) ➜  gobing.io go install ch1/hello.go
(base) ➜  gobing.io ls /Users/bing/go/bin
hello

go install 意思是编译源代码之后可执行文件或库文件,还安装到指定的目录(一般用不上,了解就好)。

开发工具

在 Go 下开发,有很多开发工具,如官网所说看你个人喜好,这里我推荐常用的三款:

我以为 GoLand 为例,效果图如下:

GoLand

如果提示需要设置 GOROOT,点击左上角 「GoLand」->「Preferences」->「Go」->「GOROOT」,如下所示:

GoLand 设置 GOROOT

我的示例动图,如下:

Hello.gif


扩展知识

Mac 自定义配置 GOPATH

为了演示 GOPAHT 的可配置,我这里再添加一个 GOPATH,以 /Users/bing/go_learn 目录作为代码工程目录。

在 Mac 上 GOPATH 可以通过修改 ~/.bash_profile 来设置;

# 打开 .bash_profile
(base) ➜  ~ vim ~/.bash_profile

# 添加如下行后,保存并退出(:wq)
export GOPATH="/Users/bing/go:/Users/bing/go_learn"

# 关闭终端重新打开
(base) ➜  ~ echo $GOPATH
/Users/bing/go:/Users/bing/go_learn