Go语言入门:安装与Hello World

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程序了。