美文网首页GO
go mod配置项目模块自引用

go mod配置项目模块自引用

作者: 鹅鹅鹅_ | 来源:发表于2019-07-28 12:14 被阅读0次

以前也写过Go项目,感觉最不爽的就是项目要依赖GOPATH,特别是从github clone的项目,有的时候还需要改其import路径才能跑起来,真的是很不爽。

使用go mod 管理项目,就不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目,import可以做到相对独立,如果github上的项目也是用go mod来管理建立的,那么clone到本地可以做到不用改任何东西来运行项目。

go mod可以通过require来引用项目以来的其他模块,类似如下格式

module GoRoomDemo
 
go 1.12
 
require (
  github.com/gin-gonic/gin v1.3.0
  github.com/golang/protobuf v1.3.1 // indirect
  github.com/gomodule/redigo v2.0.0+incompatible
)

使用中发现,也可以配置go mod项目自引用,如下是我创建的项目的结构目录:


image.png

工程项目暂时包含两个package:fetch和fetchers,在fetchers中引用了fetch包中的数据结构,如下是使用相对路径import的

package fetchers

import "../fetch"

goland ide并没有报错,然鹅build报错了......

$ go build
build market-data-fetcher: cannot find module for path _/Users/liuyihao/Documents/GitHub/market-data-fetcher/fetch

仔细一想,使用../这种相对路径来import也不优雅,于是寻找其他方案。发现go mod可以引用模块自己。如下是go.mod配置文件:

module market-data-fetcher

go 1.12

require github.com/liuhaoeee/market-data-fetcher v0.0.0-00010101000000-000000000000

哈哈,你可能在疑惑v0.0.0-00010101000000-000000000000这个版本号是怎么来的,默认写latest就行,go build会自动修正为这个长串版本号。

但是到这个步骤还是会有问题,因为go.mod虽然引用了自己,但是实际上是通过将远程git目录下载到本地来import引用的,所以如果本地添加了新的package而没有push到远程目录,引用也是无效的。而且还有个问题就是你修改了某个包的内容,想要引用就必须先push到远程git,然后更新才可以,会给调试带来巨大的不便。如下图,本地虽然引用了远程的自己,但是远程目录还没有push相关的package。


image.png

解决方案就是使用go mod的replace指令来使项目引用本地真正的自己,即不是远程git也不是本地下载的远程git镜像。

module market-data-fetcher

go 1.12

require github.com/liuhaoeee/market-data-fetcher v0.0.0-20190727134117-607096f6195c

# 这里是重点,即项目中"github.com/liuhaoeee/market-data-fetcher"相关引用路径会替换成项目根路径
replace github.com/liuhaoeee/market-data-fetcher => ./

然后就可以正常import了:

package fetchers

import "github.com/liuhaoeee/market-data-fetcher/fetch"

这个时候你可能还会发现,项目可以正常build,但是goland ide里确还会报错


image.png

这是因为你的goland还没有配置打开使用go mod包管理器,导致goland不能使用go.mod配置文件。打开就好了


image.png

至此就可以尽情的写代码了。

相关文章

  • go mod配置项目模块自引用

    以前也写过Go项目,感觉最不爽的就是项目要依赖GOPATH,特别是从github clone的项目,有的时候还需要...

  • 使用 Go Module 构建项目

    生成项目 创建一个目录作为 GO 项目目录。然后进入该目录并初始化项目。 目录下会生成模块配置文件go.mod,其...

  • Go mod 创建项目以及安装依赖

    Go mod 创建项目以及安装依赖 开启 Go mod 初始化项目 在你喜欢的目录,不一定在GOPATH了 配置国...

  • 将dep更换为go mod

    将原本的 dep 的配置删除 配置 go mod 当在当前项目目录下执行 go get , go build, g...

  • 环境配置

    环境配置go下载地址有需要的童鞋请自行下载执行一下命令建立新项目,生成go.mod文件 修改go.mod增加依赖包...

  • go mod 的操作

    1 使用 go mod 创建项目并使用 通过命令初始化项目 编写业务逻辑 引用本项目的包 引用外部依赖的包 2 引...

  • 说一说go mod

    [toc] 说一说go mod 写在前面,我们要切换到go mod吗 go mod是官方力推的go模块依赖管理的工...

  • gomod常用

    gomod文件初始化:go mod init找到项目依赖并导入:go mod tidy安装指定版本:go mod ...

  • 50.Go Mod 来创建 Gin 项目

    开启 Go mod 初始化 Go mod 使用Go mod 进行包管理,可以在$GOPATH/src 之外创建项目...

  • go get命令在go mod目录下与正常目录执行的区别

    非$GOPATH目录下的go mod项目 可见,在go mod初始化的项目目录下执行go get package,...

网友评论

    本文标题:go mod配置项目模块自引用

    本文链接:https://www.haomeiwen.com/subject/pfpurctx.html