前言
决定把 Golang 加入技能树——云原生生态(Docker、Kubernetes、Prometheus)几乎全是 Go 写的,学它性价比极高。第一步,把环境搭顺。
一、安装 Go
方式一:官方二进制包(推荐)
# 下载(国内可用 https://mirrors.aliyun.com/golang/ 加速)
cd /tmp
curl -LO https://go.dev/dl/go1.22.3.linux-amd64.tar.gz
# 解压到 /usr/local
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.3.linux-amd64.tar.gz
# 配置 PATH(写入 /etc/profile.d/go.sh 对所有用户生效)
cat > /etc/profile.d/go.sh <<'EOF'
export PATH=$PATH:/usr/local/go/bin
EOF
source /etc/profile.d/go.sh
go version # go version go1.22.3 linux/amd64
方式二:包管理器
dnf install -y golang # 版本可能偏旧, 看发行版
二、理解环境变量
go env # 查看全部配置
go env GOROOT GOPATH GOPROXY
| 变量 | 含义 |
|---|---|
GOROOT |
Go 安装目录(/usr/local/go) |
GOPATH |
旧模式的工作区;模块模式下主要放 go install 的二进制(默认 ~/go) |
GOPROXY |
模块下载代理 |
GOBIN |
go install 安装目录(默认 $GOPATH/bin) |
国内必做:设置模块代理,否则拉依赖会超时:
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
三、第一个程序
mkdir -p ~/dev/hello && cd ~/dev/hello
go mod init hello # 初始化模块, 生成 go.mod
main.go:
package main
import "fmt"
func main() {
fmt.Println("Hello, Golang! 👋")
}
# 直接运行
go run main.go
# 编译成二进制(静态编译, 部署超方便)
go build -o hello .
./hello
# 交叉编译: 在 Linux 上编译 Windows 可执行文件
GOOS=windows GOARCH=amd64 go build -o hello.exe .
💡 Go 编译产物是静态链接的,不依赖运行时库,扔到裸机容器(
FROM scratch)里就能跑——这是它适合容器化和云原生的原因之一。
四、第二个程序:Web 版 Hello World
package main
import (
"fmt"
"log"
"net/http"
"time"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s! 时间: %s\n", r.URL.Path[1:], time.Now().Format("15:04:05"))
}
func main() {
http.HandleFunc("/", handler)
log.Println("listening on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
go run main.go &
curl http://localhost:8080/zy
# Hello, zy! 时间: 20:15:33
标准库里一个 net/http 就能起服务,不需要任何框架——这就是 Go 的风格。
五、开发工具速配
# 安装 gofmt 官方格式化不用装, 自带。装个常用开发工具集
go install golang.org/x/tools/cmd/goimports@latest
# 确保 ~/go/bin 在 PATH
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bashrc
VS Code 装 Go 插件(Go Team 出品),打开 .go 文件按提示装全 gopls 等工具即可。
六、常见坑
| 现象 | 原因/解决 |
|---|---|
go: command not found |
PATH 未包含 /usr/local/go/bin,source 一下 |
| 拉依赖超时 | 没设 GOPROXY,go env -w GOPROXY=https://goproxy.cn,direct |
cannot find main module |
目录下没有 go.mod,先 go mod init xxx |
| 旧 GOPATH 教程看不懂 | 现代开发全走 Modules,不用关心 GOPATH/src 那套 |
小结
环境三步走:装二进制 → 配 GOPROXY → go mod init。接下来就可以正式开始语法学习了:变量、类型、函数与控制流。
本文是「Golang」系列第 1 篇,下篇预告:Golang 基础语法。