go命令可用性验证需依次执行go version、go env GOPATH GOROOT、go run hello.go;若报gcc缺失,可临时禁用CGO:CGO_ENABLED=0 go run hello.go。

验证 go 命令是否真正可用
很多人以为 go install 成功就代表环境 OK,其实常卡在 $GOPATH 或 $GOROOT 配置错误、Shell 未重载配置、或 Windows 下 PATH 没生效。先运行:
go version go env GOPATH GOROOT go run hello.go
如果 go run 报错 exec: "gcc": executable file not found in $PATH(尤其在 Windows + MinGW 场景),说明 CGO 默认启用但缺少 C 工具链——此时可临时禁用:CGO_ENABLED=0 go run hello.go。
立刻写一个能编译、能调试、能加依赖的最小项目
别从 “Hello World” 命令行开始,直接建一个带模块、带测试、带外部依赖的项目目录:
- 执行
mkdir myapp && cd myapp && go mod init myapp(强制启用 Go Modules) - 新建
main.go,用fmt.Println(http.Get("https://httpbin.org/get"))引入net/http - 运行
go run .看是否自动下载golang.org/x/net(若被墙,需提前配GO111MODULE=on和GOPROXY=https://goproxy.cn) - 加个
main_test.go,写一个TestSomething,跑go test -v
这一步卡住,90% 是代理或模块初始化问题,不是语法问题。
用 delve 调试而不是只靠 fmt.Println
Go 的调试体验和 Python/JS 完全不同:没有交互式 REPL,dlv 是事实标准。别等出 bug 才装:
-
go install github.com/go-delve/delve/cmd/dlv@latest(注意是@latest,不是go get) - 在项目根目录运行
dlv debug,然后输入b main.main→c→n单步 - VS Code 用户务必安装官方
Go插件,并确认设置里"go.delvePath"指向刚装好的dlv二进制
没配好 dlv,后面看 goroutine 死锁、channel 阻塞、内存泄漏时基本等于盲调。
别急着学 Web 框架,先搞懂 net/http 标准库怎么拼出真实服务
很多新手一上来就 go get gin-gonic/gin,结果连 http.ServeMux 和 http.Handler 接口的区别都说不清,导致中间件行为诡异、panic 捕获失效、甚至路由冲突都查不出原因:
- 手写一个
http.HandlerFunc,打印r.URL.Path和r.Header - 用
http.StripPrefix+http.FileServer静态服务一个./public目录 - 把 handler 包一层,实现简单日志记录(接收
http.Handler,返回新http.Handler) - 最后才引入
gorilla/mux对比它如何封装ServeMux
标准库不是“过时”,而是所有框架的底座。跳过它,后续看源码、调性能、修 panic 都会反复掉坑。










