Go导入不同目录下包报错解决办法

一次正确的配置

结果文件结构

这是操作完毕后的完整文件结构树状图,接下来将带大家一步一步完成它

特别注意!入口文件 main.gogo.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

来分析一下最关键的三行内容

  1. 第一行即 gomod 管理的所在包名称
  2. 第二行即 go 版本
  3. 第三行及剩余行即导入的依赖
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"

  1. 小写字母 c,表示给后面的包取个别名,我们之后直接使用 c 来调用
  2. 导包绝不可以使用相对路径,必须要用 go.mod 里面 module 行给出的路径打头,然后依次索引到我们的文件
  3. 这里是直接导入 Chapter1 整个包,也即导入其所拥有的所有 go 文件

此时你发现 goland 直接飘红,但这不是我们的问题!直接运行是可以跑起来的!

由于我们直接导入 Chapter1 整个包,所以按照我们定的别名 c ,直接调用方法即可使用!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Go语言中,安装第三方包需要下载、引入和版本管理。你可以使用以下步骤来安装第三方包: 1. 首先,在命令行中使用`go get`命令下载第三方包。例如,如果要安装github.com/gin-gonic/gin包,可以运行以下命令:`go get github.com/gin-gonic/gin***出一个pkg文件夹,其中包含你安装的包。 3. 如果你无法直接在网络上安装包,你可以选择离线安装的方法。首先,你需要到对应的第三方包的GitHub页面(例如https://github.com/gpmgo/gopm)下载源码压缩文件。 4. 将下载的源码压缩文件解压到对应的文件夹,并按照相应的目录结构进行构建。 5. 对于手动安装,你可以使用`go install`命令来安装包。例如,如果要安装github.com/gpmgo/gopm包,可以运行以下命令:`go install github.com/gpmgo/gopm`。 需要注意的是,Go语言对于导入的包有一定的规范。所有import的包必须在%GOPATH路径下,如果直接导入源码路径下的包,编译会报。因此,如果新加入的第三方包与工程目录脱离,你需要在使用或编译之前将第三方包所在的目录加入到$GOPATH中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [go语言 第三方包安装方法_【分享吧】Go语言第三方包的使用介绍与场景应用](https://blog.csdn.net/weixin_39760650/article/details/110134234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Golang中第三方包安装方法-git](https://blog.csdn.net/yycoolsam/article/details/106194192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhillery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值