codeblocks如何导入项目_虽然不推荐,但万一你想要呢?如何使用go module导入本地包...

本文详细介绍了在Go 1.11及以上版本中,如何使用Go Module导入本地包,包括在同一项目和不同项目下的操作。通过具体的目录结构、导入包的方法以及代码示例,帮助Go初学者解决在CodeBlocks中调用本地包时遇到的问题。
摘要由CSDN通过智能技术生成

go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。最近Go1.14版本推出之后Go module 功能已经被正式推荐在生产环境下使用了。

这几天已经有很多教程讲解如何使用go module,以及如何使用go module导入gitlab私有仓库,我这里就不再啰嗦了。

最近我发现很多小伙伴在群里问如何使用go module导入本地包,毕竟初学者刚开始接触package概念的时候都是先在本地创建一个包,然后尝试本地调用一下,但是在go module模式下调用本地包就很容易被卡住了。

本文就详细介绍下如何使用go module导入本地包。

前提

假设我们现在有moduledemomypackage两个包,其中moduledemo包中会导入mypackage包并使用它的New方法。

mypackage/mypackage.go内容如下:

package mypackageimport "fmt"func New(){    fmt.Println("mypackage.New")}

我们现在分两种情况讨论:

在同一个项目下

注意:在一个项目(project)下我们是可以定义多个包(package)的。

目录结构

现在的情况是,我们在moduledemo/main.go中调用了mypackage这个包。

moduledemo├── go.mod├── main.go└── mypackage    └── mypackage.go

导入包

这个时候,我们需要在moduledemo/go.mod中按如下定义:

module moduledemogo 1.14

然后在moduledemo/main.go中按如下方式导入mypackage

package mainimport (    "fmt"    "moduledemo/mypackage"  // 导入同一项目下的mypackage包)func main() {    mypackage.New()    fmt.Println("main")}

举个例子

举一反三,假设我们现在有文件目录结构如下:

└── bubble    ├── dao    │   └── mysql.go    ├── go.mod    └── main.go

其中bubble/go.mod内容如下:

module github.com/q1mi/bubblego 1.14

bubble/dao/mysql.go内容如下:

package daoimport "fmt"func New(){    fmt.Println("mypackage.New")}

bubble/main.go内容如下:

package mainimport (    "fmt"    "github.com/q1mi/bubble/dao")func main() {    dao.New()    fmt.Println("main")}

不在同一个项目下

目录结构

├── moduledemo│   ├── go.mod│   └── main.go└── mypackage    ├── go.mod    └── mypackage.go

导入包

这个时候,mypackage也需要进行module初始化,即拥有一个属于自己的go.mod文件,内容如下:

module mypackagego 1.14

然后我们在moduledemo/main.go中按如下方式导入:

import (    "fmt"    "mypackage")func main() {    mypackage.New()    fmt.Println("main")}

因为这两个包不在同一个项目路径下,你想要导入本地包,并且这些包也没有发布到远程的github或其他代码仓库地址。这个时候我们就需要在go.mod文件中使用replace指令。

在调用方也就是packagedemo/go.mod中按如下方式指定使用相对路径来寻找mypackage这个包。

module moduledemogo 1.14require "mypackage" v0.0.0replace "mypackage" => "../mypackage"

举个例子

最后我们再举个例子巩固下上面的内容。

我们现在有文件目录结构如下:

├── p1│   ├── go.mod│   └── main.go└── p2    ├── go.mod    └── p2.go

p1/main.go中想要导入p2.go中定义的函数。

p2/go.mod内容如下:

module liwenzhou.com/q1mi/p2go 1.14

p1/main.go中按如下方式导入

import (    "fmt"    "liwenzhou.com/q1mi/p2")func main() {    p2.New()    fmt.Println("main")}

因为我并没有把liwenzhou.com/q1mi/p2这个包上传到liwenzhou.com这个网站,我们只是想导入本地的包,这个时候就需要用到replace这个指令了。

p1/go.mod内容如下:

module github.com/q1mi/p1go 1.14require "liwenzhou.com/q1mi/p2" v0.0.0replace "liwenzhou.com/q1mi/p2" => "../p2"

此时,我们就可以正常编译p1这个项目了。

说再多也没用,赶快自己动手试试吧。

推荐阅读

  • Go Modules 处理私有 Git Repository 的流程


喜欢本文的朋友,欢迎关注“Go语言中文网”:

f84a14c6b0d0ed73d7e3016b66b1668a.png

Go语言中文网启用微信学习交流群,欢迎加微信:274768166,投稿亦欢迎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值