必须执行go mod init初始化模块、确保main.go在根目录且含package main和func main()、避免_test.go命名;否则go run会报“no Go files”或“undefined: main”。

go version 能跑通,但写不出 main.go 怎么办
环境装完只是起点,不是“可以开始学了”的信号。很多人卡在 go run main.go 报错或输出空白,本质是没理解 Go 的模块和入口约定。
必须确认三件事:
-
go mod init myapp已在项目根目录执行(否则go run可能找不到包路径) -
main.go文件里有且仅有一个func main(),且必须在package main下 - 没有把
main.go放进子目录(如src/main.go),Go 不会自动递归查找
常见错误现象:no Go files in current directory 或 undefined: main,基本都源于这三点。
别急着学 goroutine,先用 net/http 写个能 curl 通的接口
新手最容易高估并发、低估 HTTP 基础。Go 的 net/http 包极简,两分钟就能跑通一个服务,比写命令行工具更能建立正向反馈。
立即学习“go语言免费学习笔记(深入)”;
实操建议:
- 用
http.HandleFunc注册路由,别一上来就碰http.ServeMux或中间件 - 监听地址写
":8080",别用"localhost:8080"(后者在某些系统上会绑定失败) - 启动后用
curl http://localhost:8080验证,别只看终端有没有 panic
示例最小可运行代码:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello, Go!")
})
http.ListenAndServe(":8080", nil)
}
go mod tidy 报错时,优先检查 GOPROXY 和 Go 版本
国内用户最常遇到 go mod tidy 卡住或报 module lookup failed,90% 是代理或版本问题,不是代码写错了。
关键判断点:
- 运行
go env GOPROXY,确保输出包含https://goproxy.cn或https://proxy.golang.org(2026 年仍推荐前者) - 如果用的是 Go 1.21+,
GO111MODULE必须为on(go env -w GO111MODULE=on) - 避免混用
vendor目录和go mod:删掉项目下的vendor/再试
性能影响:代理失效时,go mod 会退化为直连 GitHub,超时重试长达数分钟,看起来像卡死。
VS Code 装完 Go 扩展后,还缺这三步才真正可用
插件安装不等于开箱即用。很多用户以为装完 “Go” 扩展就支持调试了,结果 F5 启动直接失败。
必须手动补全:
- 在项目根目录创建
.vscode/settings.json,写入:"go.toolsManagement.autoUpdate": true - 首次打开项目时,弹窗提示 “Install all tools” —— 一定要点,否则
dlv(调试器)不会装 - 确认
go.gopath设置为空(新版插件已弃用 GOPATH,设了反而干扰)
容易被忽略的地方:调试时若看到 could not launch process: fork/exec ... no such file or directory,大概率是 dlv 没装或路径没识别到。


















