Go导入不同目录下包报错解决办法
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一次正确的配置
结果文件结构
这是操作完毕后的完整文件结构树状图接下来将带大家一步一步完成它
特别注意入口文件 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 直接调用方法即可使用