Go Module 引入本地自定义依赖包(go modules 使用本地库)| Go Module:私有不合规库怎么解决引用问题

一、背景和基础

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

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

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

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

replace顾名思义,就是用新的package去替换另一个package。

二、Go Module 引入本地自定义包

Go Module 引入本地自定义包
参考URL: http://www.r9it.com/20190611/go-mod-use-dev-package.html

Go Module 版本规则
go modules 是一个版本化依赖管理系统,版本需要遵循一些规则,打开一个 go.mod 文件,你会发现类似下面的依赖规则:

依赖规则由两个部分组成,前面一部分是包路径,后面一部分表示的是版本号。 你会发现有两种版本号,一种是我们很熟悉的 git 标签,比如 v0.0.2,另一种就比较复杂一些,它是:版本号 + 时间戳 +hash 比如:v0.0.0-20190212224330-8d79a5489543,它其实是精准的对应着一个 git log 记录,时间是git提交的时间,后面的哈希是去提交哈希的前 12 位

比如我当前的提交记录是这样的:

$ git log 
commit 4c55783279db32be4f02e193713d5a862b96db85 (HEAD -> master, origin/master)
Author: yangjian <yangjian102621@gmail.com>
Date:   Mon Jun 10 18:34:14 2019 +0800

则我的最新版本号应该为 v0.0.0-20190610103414-4c55783279db

replace (
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 => github.com/golang/crypto v0.0.0-20190308221718-c2843e01d9a2
)

使用 replace 将远程包替换为本地包服务

module GoRoomDemo
go 1.12
require (
  github.com/gin-gonic/gin v1.3.0
  github.com/gohouse/goroom v0.0.0-20190327052827-9ab674039336
  github.com/golang/protobuf v1.3.1 // indirect
  github.com/gomodule/redigo v2.0.0+incompatible
  github.com/mattn/go-sqlite3 v1.10.0
  github.com/stretchr/testify v1.3.0 // indirect
  golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53 // indirect
)

这是一个简单的GoRoom框架的依赖关系包, 如果我想使用本地的goroom, 只需要使用replace即可

module GoRoomDemo
 
go 1.12
 
require (
  github.com/gin-gonic/gin v1.3.0
  github.com/gohouse/goroom v0.0.0-20190327052827-9ab674039336
  github.com/golang/protobuf v1.3.1 // indirect
  github.com/gomodule/redigo v2.0.0+incompatible
  github.com/mattn/go-sqlite3 v1.10.0
  github.com/stretchr/testify v1.3.0 // indirect
  golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53 // indirect
)
 
replace github.com/gohouse/goroom => /path/to/go/src/github.com/gohouse/goroom

默认使用 github.com/gohouse/goroom 包会到 Github 上去下载,但这个包还在本地开发中并未push到线上,那么可以通过 replace 配置来重定向当前项目对该包的加载路径。

三、Go Module:私有不合规库怎么解决引用问题

Go Module:私有不合规库怎么解决引用问题
参考URL: https://developer.51cto.com/article/682237.html
go modules 使用本地库、公开库和私有库
参考URL:https://blog.csdn.net/qingchuwudi/article/details/107119273

实际项目中,使用 Go Module 难免会有一些自己的库要引用,这些库使用自建的 Git 服务管理,比如 GitLab 等。针对这样的情况,不少教程都是让设置 GOPRIVATE,即不走 GOPROXY。

然而,有些时候,不仅库是私有的,而且地址很可能不是「合规」的。什么是「不合规」的?

不是 HTTPS 问题不大,主要是非 443 或 80,以及直接 IP 地址的问题比较大。因为 Go 不支持下面的语法:

import "studygolang.com:8081/polarisxu/util" 
import "192.168.1.1:80/polarisxu/util" 

一般地,我们应该避免出现这样的情况,毕竟太恶心,而且没必要自讨苦吃。

可以参考原文,但是最好避免这种情况!

四、参考

使用go module导入本地包
参考URL: https://zhuanlan.zhihu.com/p/109828249

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值