Go 1.16+无需配置GOPATH,只需确保go version≥1.16、GO111MODULE=on、go mod init模块路径与import严格一致,即可快速运行HTTP服务。

Go 环境现在不用配 GOPATH 也能跑项目,只要装对版本、开模块、写对 main.go,5 分钟内就能跑起一个 HTTP 服务。
go version 要 >= 1.16,否则 go mod init 会报错
低于 go1.16 的版本默认关闭模块模式,执行 go mod init 时可能提示 go: modules disabled by GO111MODULE=auto and GOROOT 或直接忽略 go.mod 文件。
- 用
go version查当前版本,如果输出类似go version go1.15.15 darwin/amd64,就得升级 - macOS 推荐用
brew install go;Windows 直接去 https://www.php.cn/link/81836b7cd16991abb7febfd7832927fd 下最新.msi安装包重装 - 装完后运行
go env -w GO111MODULE=on强制启用模块(1.16+ 默认开启,但某些旧系统仍需手动设) -
go env -w GOPROXY=https://goproxy.cn,direct国内必须加,不然go get会卡在拉依赖
VS Code 装 Go 插件后,别跳过 gopls 安装提示
首次打开 .go 文件时,VS Code 会弹窗问“是否安装 Go 工具”,点“Install All”最省事。但如果手快点了“Cancel”或网络中断,后续会出现:
- 没有代码补全、跳转不到定义
-
go run正常,但编辑器里标红一堆“undeclared name” - 保存时没自动格式化(
gofmt没生效)
手动修复:打开命令面板(Cmd+Shift+P / Ctrl+Shift+P),输 Go: Install/Update Tools,勾选 gopls、goimports、dlv 全部安装。其中 gopls 是语言服务器核心,缺它等于没装插件。
立即学习“go语言免费学习笔记(深入)”;
go mod init 后,import 路径不是文件夹名而是模块名
很多人在项目根目录执行 go mod init myweb,然后写 import "myweb",结果编译报错:cannot find module providing package myweb。
原因:Go 不按文件系统路径解析 import,而是查 go.mod 第一行的 module 名。比如:
module github.com/yourname/myweb
那代码里就得写 import "github.com/yourname/myweb/subpkg",哪怕 subpkg 就在当前目录下。
- 初始化时建议用真实域名或 GitHub 用户名:
go mod init github.com/yourname/myweb - 本地开发不想暴露用户名?可用假域名:
go mod init example.com/myweb,只要自己一致就行 - 如果只是临时测试,不打算发包,
go mod init参数随意,但 import 必须和go.mod里声明的 module 完全一致
net/http 服务监听 localhost:8080,但浏览器打不开?先看终端有没有 panic
写完 http.ListenAndServe(":8080", nil) 运行后,终端没报错、没退出,但浏览器访问 http://localhost:8080 显示“连接被拒绝”,常见原因只有两个:
- 程序启动后立刻 panic 退出了(比如端口被占),但 VS Code 默认不显示 panic 日志——要看终端里
go run main.go的原始输出,别只盯编辑器右下角状态栏 - 防火墙或杀毒软件拦截了本地监听(尤其 Windows 上某些安全软件会静默拦截);临时关掉试试
- Mac 上用了 Docker Desktop?它的 Kubernetes 功能有时会占用
8080,换端口更省事:http.ListenAndServe(":8081", nil)
真正容易被忽略的是:Go 的 http.ListenAndServe 是阻塞调用,一旦出错(如端口不可用)会直接 panic 并退出进程,不会留后台线程——所以看不到服务,大概率是根本没起来。


















