Go语言中本地包的嵌套调用方法

最近学习区块链,在使用Go语言的过程中遇到本地包之间相互调用的问题,问题分为两个阶段:

1.如何调用本地包(参考文章:https://blog.csdn.net/taoerchun/article/details/104827702):

Golang在1.11版本后加入了新特性go modules,它是Golang的官方包管理工具。常用的命令有:

go mod init modulename //初始化模块,其中modulename一般为文件夹名。该步骤生成go.mod文件,其中记录了所依赖的包
go mod tidy //该步生成了go.sum文件,具体好像是检查包是否被更改过,里面存储了一些哈希值。
go mod vendor //该步骤将依赖包复制到vendor文件夹下,不是必须步骤

当我们要调用本地包时,需要更改go.mod文件,并重新生成go.sum文件。本地包也分为两种情况:

情况一:在同一个项目(文件夹)下,
test
├── go.mod
├── main.go
└── util
  └── util.go

 此时如果想要在main.go中导入util.go并使用其中的函数,直接导入即可(注意,此时已经使用go mod init test命令生成了go.mod文件):

import (
 "test/util" // 导入同一项目下的util包
)
情况二:在不同项目(文件夹)下,
├── test
│   ├── go.mod
│   └── main.go
└── util
    ├── go.mod
    └── util.go

这时候,util也需要使用go mod init util 命令进行初始化并生成go.mod文件。想要在main.go中调用util包,需要在test的go.mod文件中指明路径:

module test
go 1.20

require "util" v0.0.0 //指明依赖包和版本号 replace "util" => "../util" //将util包替换为本地路径下的文件,如果直接使用相对路径golang会报错,所以使用这样的方法替换

然后再main.go中导入即可:

import (
"util" //直接使用go.mod中require使用的包名即可,不需要再考虑路径
)

2.如何嵌套调用本地包(参考文章:https://blog.csdn.net/hejingdong123/article/details/124147043):

当我尝试嵌套调用本地包时,按照上面的操作方法遇到了error,大概意思是找不到嵌套的第二个包。例如:

 

 

 main.go需要调用db.go中的函数,而db.go又需要调用util.go中的函数。这种情况下,在db包的go.mod中按照上述1的方法调用util.go是能够成功的,但是当在main.go中调用db.go时却会报错,提示找不到util包。此时正确的调用方法如下:

(1)db文件夹下的go.mod文件中按照上述1的方法加入:

module db
go 1.20
require "util" v0.0.0
replace "util" => "../util"

(2)test文件夹下的go.mod文件中不但需要加入db包的路径,还需要加入嵌套调用的util包的路径:

复制代码
module test
go 1.20

require (
    "db" v0.0.0 
    "util" v0.0.0 
)
replace(
    "db" => "../db"
    "util" => "../util"
复制代码

然后再运行就不会报错了。

 

posted @   衣青云  阅读(474)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示