goland新建项目必须选“go模块”类型并确保go.mod存在,否则import报错;goroot须指向go安装根目录(如/usr/local/go),不能填bin子目录;项目需以含go.mod的目录为根打开,import路径须严格匹配go.mod声明的module名。

GoLand 本身不提供 Go 项目级脚手架(比如 nunu new 或 goctl api new 那种命令行生成器),但它能无缝配合这些工具,关键在于「让 IDE 识别 module、加载正确 SDK、并支持模板补全」——否则你生成的目录结构再规范,GoLand 也报红、跳转失效、go run 报 cannot find package。
GoLand 新建项目时必须选对“Go 模块”类型
很多人点“新建项目”后误选了“Empty Project”或“Go Application”,结果生成的目录里没有 go.mod,后续所有 import 都标红。这不是插件问题,是项目类型没对。
- 必须选 Go 模块(Go Module),不是“Go 应用程序”
-
GOROOT要指向真实 Go 安装路径(如/usr/local/go),不能留空或填错 - 首次创建后,GoLand 会自动运行
go mod init——但 module 名默认是当前文件夹名,如果将来要发布到 GitHub,建议手动改go.mod第一行,比如改成module github.com/yourname/myapp - 改完 module 名后,立刻执行
go mod tidy(右键项目 → Go Modules → Tidy Modules),否则 import 路径和实际目录不匹配,go build就失败
用 nunu / go-scaffolding 生成的项目,在 GoLand 里打不开?
常见现象:克隆 go-scaffolding 或用 nunu new myapp 生成项目后,直接在 GoLand 里 Open Folder,结果 internal/ 下代码全灰、cmd/server/main.go 里 import "myapp/internal/handler" 报错。根本原因是 GoLand 没把该目录识别为 Go module 根。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 不要用 “Open Folder”,要用 “Open Project” 并勾选 “Attach as project root”
- 确保项目根目录下有
go.mod文件;如果没有,终端进该目录,手动运行go mod init github.com/xxx/yyy - 检查
Settings → Go → GOPATH是否为空 —— GoLand 2023.3+ 默认禁用 GOPATH 模式,启用它反而会导致 module 解析混乱 - 如果用了
go-nunu的wire依赖注入,需确认wire_gen.go已生成(运行go generate ./...),否则main.go里InitApp()会标红
如何让 GoLand 补全 Gin/GORM/Zap 等脚手架常用代码?
GoLand 默认只补全标准库,第三方库的函数签名、结构体字段、方法链不会自动提示,除非你显式告诉它“这个包我用了”。
- 在
go.mod中添加依赖后(如require github.com/gin-gonic/gin v1.9.1),必须等右下角弹出 “Load changes” 提示并点击,否则补全不生效 - 写
gin.H{}时如果没提示,说明github.com/gin-gonic/gin没被索引 —— 右键项目 → Reload project - 自定义模板(如快速生成 handler)可用
Live Templates:进入Settings → Editor → Live Templates,新增一个模板,缩写设为gh,展开内容为:func (h *$HANDLER_NAME$Handler) $METHOD_NAME$(c *gin.Context) { $END$ },然后在 .go 文件里输入gh+ Tab 就能插入 - 别依赖“自动 import”:GoLand 有时会把
github.com/yourapp/internal/handler错补成./internal/handler,后者在 Go module 下非法,保存前务必人工核对 import 路径
为什么 go run main.go 总提示 cannot find package?
这几乎全是路径和 module 声明不一致导致的,和 GoLand 关系不大,但 IDE 不报错会让人误以为没问题。
- 错误 import 示例:
import "./cmd/server"或import "myapp/internal/handler"(但go.mod里写的是module github.com/yourname/myapp) - 正确 import 必须严格以
go.mod第行为前缀,比如import "github.com/yourname/myapp/internal/handler" - 子命令(如
cmd/migrate/main.go)也要遵守同一规则,不能因为“它在 cmd 目录下”就写相对路径 - 如果用
go run cmd/server/main.go,确保当前终端工作目录是项目根(不是cmd/server子目录),否则go run会找不到go.mod
最易忽略的一点:GoLand 的 Run Configuration 默认工作目录是项目根,但如果你手动改过,或者用了脚手架自带的 nunu run,它们可能在子目录下启动 —— 这时 go run 看不到 go.mod,直接退化成 GOPATH 模式,必然报错。










