linux上必须手动安装go,别用apt install golang;ubuntu 22.04自带go1.18不支持新语法和go.mod版本要求,应下载官方go1.22.5二进制包,解压至/usr/local/go,显式配置goroot和path开头,并设goproxy=https://goproxy.cn,direct。

Linux上必须手动安装Go,别碰apt
用 apt install golang 装出来的 Go 基本没法跑新项目。Ubuntu 22.04 自带 go1.18,而当前稳定版是 go1.22.5,旧版不支持 //go:embed、any 类型推导、range over map 等语法,go.mod 里写 go 1.21 就直接报错。
更麻烦的是路径混乱:apt 装的 Go 默认在 /usr/lib/go,没权限写、升级要重装、还和 /usr/local/go 冲突,导致 go build 找不到 runtime 包。
- 下载官方包:
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz(ARM 服务器换linux-arm64.tar.gz) - 解压并清理旧路径:
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz - 全局配置环境变量:
echo 'export GOROOT=/usr/local/go' | sudo tee /etc/profile.d/golang.sh,再追加PATH行 - 国内必须设代理:
go env -w GOPROXY=https://goproxy.cn,direct
生成自签名证书时,Common Name 和 SAN 必须含 localhost
浏览器现在对 localhost 不再无条件信任自签名证书。如果证书的 Common Name 是 example.com,但你访问的是 https://localhost:8443,Chrome 会报 ERR_CERT_COMMON_NAME_INVALID,连接直接被拒。
推荐用 OpenSSL 一步生成,且交互时 Common Name 一定填 localhost:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
或者更稳妥地用 mkcert(无需交互、自动加 SAN):
-
brew install mkcert(macOS)或go install github.com/FiloSottile/mkcert@latest -
mkcert -install(把本地 CA 加进系统信任库) -
mkcert localhost 127.0.0.1 ::1→ 生成localhost-key.pem和localhost.pem
生成的证书必须是 PEM 格式,不能是 PKCS#12(.pfx),Go 的 http.ListenAndServeTLS 不支持。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
Go 启动 HTTPS 服务时,文件路径和私钥格式不能错
http.ListenAndServeTLS 要求两个独立的 PEM 文件:cert.pem(含完整证书链)和 key.pem(未加密私钥)。常见错误包括:
- 私钥有密码保护 → 报
tls: failed to find any PEM data in certificate input - 只传了域名证书,漏掉中间 CA → 浏览器提示
NET::ERR_CERT_AUTHORITY_INVALID - Windows 路径写成
"C:\certs\cert.pem"→ 因\c被解析为控制字符,报The system cannot find the path specified
正确写法只有两种:
- 用正斜杠:
"C:/certs/cert.pem" - 用原始字符串:
`C:\certs\cert.pem`
启动代码示例:
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
w.Write([]byte("HTTPS OK"))
})
log.Fatal(http.ListenAndServeTLS(":8443", "cert.pem", "key.pem", nil))
}
客户端访问自签名服务时,得自己加载根证书
如果你的 Go 程序作为 HTTP 客户端去调用另一个自签名 HTTPS 服务(比如调自己刚起的 https://localhost:8443),默认会报错:x509: certificate signed by unknown authority。
原因:Go 客户端默认依赖系统根证书,而自签名证书不在系统 CA 存储里。解决方式不是改系统证书,而是编程注入:
- 读取你的
cert.pem(即服务端用的证书文件) - 用
x509.NewCertPool()创建证书池 - 调用
pool.AppendCertsFromPEM()加载 - 绑定到
http.Transport.TLSClientConfig.RootCAs
关键点:不能复用服务端证书文件名就完事——必须确保该文件内容是 PEM 格式、且是证书(不是私钥),否则 AppendCertsFromPEM 返回 false 且静默失败。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










