GoLand:Cannot resolve symbol
1. goland中两个关键的配置
- GOROOT
配置 go sdk 的安装目录,eg:D:\ProgramData\go\go1.18.3
, 不用指定到bin
目录 - GOPATH
可以理解为依赖包的目录, 通过Go命令安装的依赖包放在这个目录底下,eg: D:\ProgramData\go\golib
go get github.com/aws/aws-sdk-go-v2
go get github.com/aws/aws-sdk-go-v2/config
go get github.com/aws/aws-sdk-go-v2/service/dynamodb
通过go get 或者 go install 安装的依赖包都会放到 GOPATH 目录, eg:
2. 解决import时关联不到安装的依赖包
- go包管理介绍:
Go 的代码复用很大程度依赖于包基础上,而包管理很大程度依赖于 GOPATH。Go 的包管理一直饱受诟病,不过自 1.11 版本发布 Go Modules 以来已经出现很大程度的改善。本文我们将初步了解 Go 的包管理。 - 创建一个依赖于 http://golang.org/x/example 模块 hello工程,工程目录如下:
├── hello
│ └── hello.go
// hello.go
package main
import (
"fmt"
"golang.org/x/example/stringutil"
)
func main() {
fmt.Println(stringutil.Reverse("Hello, yuzhou1su"))
}
使用go get 安装依赖包:
go get golang.org/x/example
这样的工程目录结构,即使通过go命令安装依赖包,也关联不到。
- 原因是 Go Modules 并没有管理安装的包, 要使安装的包被 Go Modules管理,工程目录需有一个 go.mod 文件,go.mod的内容如下:
module example.com/hello
go 1.18
require golang.org/x/example v0.0.0-20220412213650-2e68773dfca0 // indirect
- go.mod 指定了 module 名; go 版本(我用的 1.18.3 版本);以及依赖包。
2.1解决办法:
- 创建 go.mod, 可以通过goland的Terminal终端:
cd hello
go mod init example.com/hello
- 最终的工程目录:
- 运行这个hello程序:
- 1.直接在Goland中运行
- 2.或者在 Goland 的Terminal 终端运行命令:
go run example.com/hello
- 得到一个反转的字符串结果:
us1uohzuy ,olleH
Reference:
1.Go 1.18 新特性:多模块工作区模式
2.基于Gin+Gorm框架搭建MVC模式的Go语言企业级后端系统