首页 > 其他分享 >Go语言中本地包的嵌套调用方法

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

时间:2023-03-28 17:57:03浏览次数:46  
标签:调用 db util 嵌套 test go Go mod

最近学习区块链,在使用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"
)

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

 

标签:调用,db,util,嵌套,test,go,Go,mod
From: https://www.cnblogs.com/P201721440036/p/17265877.html

相关文章