不用配gopath。go 1.11起默认启用go mod模式,新建项目只需go mod init即可生成go.mod,gopath对日常开发已无实际作用;安装后执行go version验证,再在空目录运行go mod init和go run .即可运行hello程序。

Windows 上装 Go 环境,到底要不要配 GOPATH?
不用配。Go 1.11 之后启用 go mod 模式,默认忽略 GOPATH,除非你非要维护一个老项目(比如用 dep 或没 go.mod 的代码)。现在新建项目直接 go mod init example.com/myapp 就行,GOPATH 对日常开发已无实际作用。
常见错误现象:go run . 报错 no required module provides package,本质不是环境没装好,而是当前目录下缺 go.mod ——不是路径问题,是模块初始化没做。
- 安装完 Go 后,打开终端执行
go version,看到类似go version go1.22.5 windows/amd64即可确认安装成功 - 接着 cd 到空文件夹,运行
go mod init myproj,立刻生成go.mod文件 - 写个
main.go,内容就一行package main; func main() { println("hello") },再go run .能输出即通
用什么编辑器写 Go?VS Code 装哪些插件才不踩坑
VS Code 是跨界学 Go 最省心的选择,但默认不带 Go 支持,必须手动装插件。只装一个就够了:Go 官方插件(作者:golang.go),别贪多装一堆“Go Tools”“Go Import”之类第三方插件——它们常和官方插件冲突,导致 go fmt 失效、跳转失灵或保存自动删空行。
装完重启 VS Code,打开 main.go,右下角会提示 “Installing tools”,等它自动装完 gopls、dlv、goimports 等核心工具。若卡住,手动在终端跑:go install golang.org/x/tools/gopls@latest。
- 确保设置里关掉
"editor.formatOnSave": true和"editor.codeActionsOnSave": { "source.organizeImports": true }——这两项依赖goimports,而它的行为和gofmt不完全一致,新手容易误以为格式化“出错了” - 调试时直接按
F5,VS Code 会自动生成.vscode/launch.json,无需手写配置 - 别用 “Go Test Explorer” 这类插件——
go test -v ./...一条命令足够,图形界面反而掩盖了真实测试流程
第一次写 HTTP 服务,为什么浏览器打不开 localhost:8080?
因为 Go 的 http.ListenAndServe 默认阻塞当前 goroutine,程序看似“运行了”,实则卡在监听上,但如果你用 go run main.go 启动后立刻关掉终端,服务就死了;或者你写了 log.Fatal(http.ListenAndServe(...)) 却没加 log 包导入,编译都过不去。
最简能跑通的 HTTP 示例只有 4 行,且必须包含错误处理(哪怕只是 panic):
package main
import "net/http"
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("ok")) })
panic(http.ListenAndServe(":8080", nil))
}
- 端口被占?改用
:8081或其他未被占用端口,Windows 可用netstat -ano | findstr :8080查进程 - 杀进程不干净?任务管理器里找
go.exe或cmd.exe相关进程,结束掉再重试 - 防火墙拦截?仅影响外网访问,本机
localhost不受限制,不必折腾防火墙设置
跨平台编译时,为什么 Linux 二进制在 Windows 上双击没反应?
Go 编译出的是静态链接的原生二进制,不能跨操作系统运行。你在 Windows 上执行 GOOS=linux go build -o app-linux main.go,得到的是 Linux 可执行文件,Windows 无法识别其格式,双击只会弹“不是有效的 Win32 应用程序”——这不是 bug,是设计使然。
真正需要跨平台时,应在对应系统上编译,或用 Docker 构建。本地快速验证可用:
- Windows → Linux:
set GOOS=linux && set GOARCH=amd64 && go build -o app main.go(注意&&是 cmd 语法,PowerShell 用$env:GOOS="linux") - macOS → Windows:
GOOS=windows GOARCH=amd64 go build -o app.exe main.go - 嵌入式目标(如 ESP32)必须用 TinyGo,标准 Go 编译器不支持;TinyGo 的
tinygo build -target=esp32才是正解
容易被忽略的是 CGO_ENABLED 默认为 1,但交叉编译时若代码用了 cgo(比如调系统 API),必须显式关掉:CGO_ENABLED=0 GOOS=linux go build,否则会报找不到 C 编译器。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











