现成脚手架比从零搭建快5倍以上,但需确保git在path、当前目录为空且已go mod init、gopath与go111module配置正确;生成后必检main.go入口、cmd/root.go逻辑、go.mod模块名一致性;go+vue嵌入需路径匹配、构建标签正确、静态路由注册。

直接用现成脚手架比从零搭快 5 倍以上,但前提是环境对齐、生成后必检三处、依赖必须手动 go mod tidy——否则 go run . 报 no Go files in 或 build failed 是常态,不是代码写错了。
cobra init 或 nunu new 失败,八成是环境没过这三关
这两个命令不报错,但会静默跳过关键步骤,导致生成的 main.go 为空、cmd/root.go 里 import 路径错乱。
-
git必须在PATH中:运行which git或git --version确认;否则cobra init直接退出,提示exec: "git": executable file not found in $PATH - 当前目录必须为空,且已执行
go mod init myapp(模块名不能是.或空) -
cobra init必须在该目录下运行;否则cmd/root.go的 import 会变成github.com/xxx/cmd,而不是你自己的模块路径
nunu new 时 GOPATH 和 GO111MODULE 冲突怎么破
nunu 默认读 go env GOPATH 决定模板写入位置,但 Go 1.16+ 已默认 module 模式,残留的 GOAPTH 设置会导致生成路径错乱、go run 找不到包。
- 先清理干扰:
go env -w GOPATH=$(go env GOMOD | sed 's|/go\.mod||')(或删掉~/.bashrc里手写的export GOPATH=) - 确认
go env GO111MODULE返回on,否则nunu new可能降级到 GOPATH 模式 -
-r参数必须显式指定远程 layout:nunu new myapp -r https://github.com/go-nunu/nunu-layout-advanced.git;不加就用最简模板,缺中间件、日志、DB 初始化等结构
生成完不等于能跑,这三处不手动核对,90% 启动失败
脚手架工具从不自动帮你 go get 依赖,哪怕看着一切正常,缺一个 github.com/spf13/viper,错误也只显示 build failed,不会告诉你缺谁。
-
main.go第一行是否为package main,且是否含cmd.Execute()(cobra)或apps.Run()(nunu)调用 -
cmd/root.go中var rootCmd = &cobra.Command{}的Run函数是否写了实际逻辑?默认只打印 help;想一运行就输出helloworld,得把fmt.Println("helloworld")放进去 -
go.mod顶部的module名是否和所有import语句一致?比如import "myapp/cmd"对应module myapp,错一个字母就会cannot find package
Go + Vue 打包成单二进制,embed 配置容易漏的关键点
把前端打进 Go 二进制里省部署,但 embed.FS 不是写完路径就能用,路径错、构建标签漏、HTTP 文件服务没配对,都会导致页面 404 或 JS 报错。
- Vue 构建产物(如
dist/)必须在go build前生成,且路径要和//go:embed dist/*中的路径完全匹配(注意通配符层级) - 若用
go:build !dev区分开发/生产模式,记得加//go:build !dev前置标签,否则 embed 不生效 - HTTP 服务需显式注册静态文件路由:
r.StaticFS("/static", http.FS(distFS)),且前端请求路径(如/static/js/app.js)要和嵌入路径对上
最常被忽略的是:脚手架生成完,第一件事不是改业务逻辑,而是立刻 go mod tidy,再 go run . 看是否真能启动。任何“看着像对了”的状态,都不如终端里打出一行 Starting server on :8080 可靠。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











