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

 更新时间:2023年06月07日 10:47:37   作者:知奕奕  
包(package)是多个Go源码的集合,是一种高级的代码复用方案,下面这篇文章主要给大家介绍了关于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

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

  • 第一行即 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导入不同目录包报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Golang使用Gin框架实现http分块传输

    Golang使用Gin框架实现http分块传输

    这篇文章主要为大家详细介绍了Golang中如何使用Gin框架实现http分块传输功能,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
    2023-05-05
  • 详解go程序如何在windows服务中开启和关闭

    详解go程序如何在windows服务中开启和关闭

    这篇文章主要介绍了一个go程序,如何在windows服务中优雅开启和关闭,文中通过代码示例和图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-07-07
  • golang redis 管道的实现

    golang redis 管道的实现

    在Golang中操作Redis时,管道是一种优化批量命令执行效率的重要方式,它通过减少客户端与Redis服务器之间的网络往返次数,将多个命令一次性发送到服务器,再一次性接收所有响应,从而显著提升批量操作的性能
    2026-04-04
  • Golang中匿名函数的实现

    Golang中匿名函数的实现

    本文主要介绍了Golang中匿名函数的实现,包括直接调用、赋值给变量及定义全局匿名函数三种方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • 详解go语言 make(chan int, 1) 和 make (chan int) 的区别

    详解go语言 make(chan int, 1) 和 make (chan int) 的区别

    这篇文章主要介绍了go语言 make(chan int, 1) 和 make (chan int) 的区别,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 初学Go必备的vscode插件及最常用快捷键和代码自动补全

    初学Go必备的vscode插件及最常用快捷键和代码自动补全

    这篇文章主要给大家介绍了关于初学vscode写Go必备的vscode插件及最常用快捷键和代码自动补全的相关资料,由于vscode是开源免费的,而且开发支持vscode的插件相对比较容易,更新速度也很快,需要的朋友可以参考下
    2023-07-07
  • golang接收post和get请求参数处理

    golang接收post和get请求参数处理

    本文主要介绍了golang接收post和get请求参数处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • golang之判断元素是否在数组内问题

    golang之判断元素是否在数组内问题

    这篇文章主要介绍了golang之判断元素是否在数组内问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2020-12-12
  • 一文探索Go语言中的内存对齐

    一文探索Go语言中的内存对齐

    在 Go 语言中,内存对齐是一个经常被忽略但非常重要的概念,本文将通过一个简单的例子来探讨 Go 语言中的内存对齐机制,感兴趣的可以了解下
    2024-11-11
  • 浅析Go语言的数据类型及数组

    浅析Go语言的数据类型及数组

    Golang是一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。本文主要和大家聊聊Go语言的数据类型及数组,希望对大家有所帮助
    2022-11-11

最新评论