Go语言(Golang)是Google开发的静态编译型语言,编译快、部署简单、天然支持并发。这篇记录Go的安装配置到写出第一个程序的完整过程。
安装Go
Linux
# 下载(以1.17为例)
wget https://go.dev/dl/go1.17.linux-amd64.tar.gz
# 解压到/usr/local
sudo tar -C /usr/local -xzf go1.17.linux-amd64.tar.gz
# 配置环境变量,追加到 ~/.bashrc 或 ~/.zshrc
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
Windows
直接去 https://go.dev/dl/ 下载msi安装包,一路下一步就行。安装完自动配好环境变量。
macOS
brew install go
验证安装
$ go version
go version go1.17 linux/amd64
GOPATH与Go Modules
早期Go项目必须放在$GOPATH/src下面,现在用Go Modules就不用了。不过还是要了解几个目录:
GOROOT:Go的安装目录(如/usr/local/go),一般不需要手动设置GOPATH:工作空间(默认$HOME/go),第三方包会下载到$GOPATH/pkg/mod
从Go 1.11开始引入Go Modules,现在的项目都应该用module管理依赖。
创建第一个项目
# 创建项目目录
mkdir ~/hello && cd ~/hello
# 初始化module
go mod init github.com/yourname/hello
go mod init会生成一个go.mod文件:
module github.com/yourname/hello
go 1.17
Hello World
创建main.go:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
几个要点:
package main:可执行程序必须属于main包import "fmt":导入标准库的fmt包func main():程序入口
运行
# 直接运行(编译+执行,不生成文件)
$ go run main.go
Hello, World!
# 编译为二进制文件
$ go build -o hello
$ ./hello
Hello, World!
# 安装到$GOPATH/bin
$ go install
go build生成的是静态链接的二进制文件,不依赖任何运行时,直接拷到同架构的机器上就能跑——这是Go部署方便的原因之一。
多文件项目
hello/
├── go.mod
├── main.go
└── greet/
└── greet.go
greet/greet.go:
package greet
import "fmt"
func Hello(name string) {
fmt.Printf("Hello, %s!\n", name)
}
main.go中引用:
package main
import "github.com/yourname/hello/greet"
func main() {
greet.Hello("Go")
}
注意:Go中大写开头的函数/变量是导出的(public),小写开头的是包内私有的。
引入第三方依赖
# 添加依赖
go get github.com/gin-gonic/gin
# go.mod会自动更新
# 同时生成go.sum记录依赖hash
# 清理无用依赖
go mod tidy
常用go命令
go run # 编译并运行
go build # 编译
go install # 编译并安装到$GOPATH/bin
go test # 运行测试
go fmt # 格式化代码
go vet # 静态检查
go mod tidy # 整理依赖
go doc # 查看文档
编辑器配置
推荐VS Code + Go扩展(gopls)。安装完Go扩展后,VS Code会提示安装gopls、dlv等工具,全部装上就行。
也可以用GoLand(JetBrains出品),功能更全但收费。
小结
Go的工具链做得很完善,go mod管依赖、go build编译、go test跑测试、go fmt格式化,全都是内置的。入门门槛不高,学完这篇就可以开始写简单的Go程序了。