Go导入不同目录下包报错的解决方法
作者:知奕奕
一次正确的配置
结果文件结构
这是操作完毕后的完整文件结构树状图,接下来将带大家一步一步完成它
特别注意!入口文件 main.go
和 go.mod
在同一目录下!这一点必须要保证!
└─gindemo.com
│ go.mod
│ go.sum
│ main.go
│
├─.idea
│ .gitignore
│ gindemo.com.iml
│ modules.xml
│ workspace.xml
│
└─src
└─Chapter1
C1.go
创建项目
该项目创建使用goland2020
任选一个文件夹创建目录,注意项目的名字最好依照这个格式: xxx.xxx
点号的后缀随便写,只要保证上面这样的格式就好了
我们新建一个项目 gindemo.com
此时打开 goland 的设置页面,设置好 GOROOT
GOPATH
设置过程请参考 gin 相关文章!
新建文件 main.go (和 go.mod 同目录)
// 入口点入口点!!!必须要main!!!别忘了求求你了 package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { app := gin.Default() app.GET("/shit", func(context *gin.Context) { context.JSON(http.StatusOK, gin.H{ "error": "shit", }) }) app.Run(":10086") }
这是一个最简单的 gin 后端,因为我们之前配置好了 GOPATH
,所以这里 goland 会为我们自动导包,故不会出现飘红现象!
但实际上 go.mod
内部依然没有配置依赖,我们需要在项目目录下打开命令行,输入 go mod tidy
为我们自动处理好依赖关系;
此时配置好运行参数直接运行 main 方法就可以开启我们的后端服务了
不同文件夹下导包
新建文件(大小写不是必要的) src/Chapter1/C1.go
代码不是重点,我们要做的是在 main.go
里面使用该文件的 BindDemo
方法
方法名需要大写开头!
package Chapter1 import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) ... func BindDemo(c *gin.Context) { ... }
来到我们的 go.mod
来分析一下最关键的三行内容
- 第一行即 gomod 管理的所在包名称
- 第二行即 go 版本
- 第三行及剩余行即导入的依赖
module gindemo.com go 1.19 require github.com/gin-gonic/gin v1.8.2
此时记下我们 go.mod
管理的包名叫做: gindemo.com
(其实就是咱们的项目名)
打开 main.go 修改代码为
package main import ( // 这表示取别名,用小写字母c代表后面导入的内容 c "gindemo.com/src/Chapter1" "github.com/gin-gonic/gin" "net/http" ) func main() { app := gin.Default() app.GET("/shit", func(context *gin.Context) { context.JSON(http.StatusOK, gin.H{ "error": "shit", }) }) // 在这里调用 C1.go 文件内的方法 app.GET("/c1",c.BindDemo) app.Run(":10086") }
我们来分析一下 import 里面这行代码的含义:c "gindemo.com/src/Chapter1"
- 小写字母 c,表示给后面的包取个别名,我们之后直接使用 c 来调用
- 导包绝不可以使用相对路径,必须要用 go.mod 里面 module 行给出的路径打头,然后依次索引到我们的文件
- 这里是直接导入 Chapter1 整个包,也即导入其所拥有的所有 go 文件
此时你发现 goland 直接飘红,但这不是我们的问题!直接运行是可以跑起来的!
由于我们直接导入 Chapter1 整个包,所以按照我们定的别名 c ,直接调用方法即可使用!
总结
到此这篇关于Go导入不同目录下包报错的解决方法的文章就介绍到这了,更多相关Go导入不同目录包报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- go语言import报错处理图文详解
- Go语言将string解析为time.Time时两种常见报错
- 解决MySQL报错:The last packet sent successfully to the server was 0 milliseconds ago.
- go mod tidy报错解决方法详解
- go引入自建包名报错:package XXX is not in std解决办法
- goland安装1.7版本报错Unpacked SDK is corrupted解决
- Django-Xadmin后台首页添加小组件报错的解决方案
- Django报错TemplateDoesNotExist的问题及解决
- 在 SHELL 脚本中调用另一个 SHELL 脚本的方法(报错: go:not found)
- 解决MongoDB 位置查询报错planner returned error: unable to find index for $geoNear query的问题
- django报错设置auth User的解决
- 解决Oracle DISTINCT 报错 inconsistent datatypes: expected - got CLOB(数据类型不一致: 应为 -, 但却获得 CLOB)的问题
- Java中报错org.springframework.jdbc.UncategorizedSQLException的多种解决方法
- 执行go build报错go: go.mod file not found in current directory or any parent directory
- 解决MongoDB6.0报错:"mongo"不是内部或外部命令,也不是可运行的程序或批处理文件
- maven报错:Failed to execute goal on project问题及解决
- Mongodb启动报错完美解决方案:about to fork child process,waiting until server is ready for connections.
- golang中package is not in GOROOT报错的真正解决办法
- Go语言报错:'godoc' 不是内部或外部命令,也不是可运行的程序(godoc无法使用处理)解决方法