![305f5ec75b7c514c8b86229c6e5daaee.png](https://i-blog.csdnimg.cn/blog_migrate/9905a68ca48a0b656df3ee30e118fa5e.jpeg)
大家好,我是明哥。
由于某些不可抗力,之前该专栏的所有内容都被删除了。因此之后的一段时间内,我会重新发布这些文章,先给已经看过的关注者提个醒。
本文原文:http://golang.iswbm.com
Github:http://github.com/iswbm/GolangCodingTime
通常之前的学习,我们知道了在 Go 的项目中,可以 import 一个托管在远程仓库的模块,这个模块在我们使用 go get 的时候,会下载到本地。
既然是放在远程仓库上,意味着所有人都可以发布,并且所以人也都可以使用。
今天就来学习一下,如何发布一个开源的模块,并且使用它。
1. 新建仓库
先在你的 Github 上新建一个仓库,记得选 Public(默认)
![ba285ce70ca096d029e2b49f18bc03cd.png](https://i-blog.csdnimg.cn/blog_migrate/36929ef78f23b64a28b0ad523de92a68.jpeg)
然后你会得到一个仓库地址,在你的电脑上 使用 git clone
命令克隆下来
2. 编写模块代码
使用前面学过的 go mod init 命令进行初始化,注意这里的模块名,填写我们的git仓库地址(但是要去掉.git
哈)
$ git clone https://github.com/BingmingWong/goutils.git
$ go mod init github.com/BingmingWong/goutils
![be7e71eba4348f787015b824eef1dd59.png](https://i-blog.csdnimg.cn/blog_migrate/f76db8de8d33be1f6c651f39d74812f1.jpeg)
然后新建一个 hash 文件夹,存放编写的一个计算 md5 值工具包,编辑 md5.go
package hash
import (
"crypto/md5"
"encoding/hex"
"errors"
"fmt"
"io"
"os"
)
// get file md5
func FileMd5(filename string) (string, error) {
file, err := os.Open(filename)
if err != nil {
return "", errors.New(
fmt.Sprintf("md5.go hash.FileMd5 os open error %v", err))
}
h := md5.New()
_, err = io.Copy(h, file)
if err != nil {
return "", errors.New(fmt.Sprintf("md5.go hash.FileMd5 io copy error %v", err))
}
return hex.EncodeToString(h.Sum(nil)), nil
}
// get string md5
func StringMd5(s string) string {
md5 := md5.New()
md5.Write([]byte(s))
return hex.EncodeToString(md5.Sum(nil))
}
由于我们使用的都是内置包,没有引入第三方的包,所以接下来可以把你刚刚那些新增的文件,全部 push 到 git 仓库。
$ git add -A
$ git commit -m "Add a md5 function"
$ git push
3. 发布版本
一切完成后,刷新我们的仓库,就可以看到我们的刚刚上传的项目代码了,点击 release 发布一个版本
![c27603ee5fb4c1a32a77b4fea00ece25.png](https://i-blog.csdnimg.cn/blog_migrate/acc284e2da983a5733043b4ea6ee31aa.jpeg)
![848c6504b91eb45fe87abea42b383a82.png](https://i-blog.csdnimg.cn/blog_migrate/4a094b07ae6ea4dc332a7b7284d33e34.jpeg)
然后像下图一样,添加一些版本说明
![3482dc21770ce74f4c1bf0caa86b88f3.png](https://i-blog.csdnimg.cn/blog_migrate/06330f54efc8d0eeb712d5435324eb72.jpeg)
最后点击一个 Publish release
,就发布了一个版本
![1e40ae635ee9bee83262e3b1e417c562.png](https://i-blog.csdnimg.cn/blog_migrate/163f62c50d45f19881a2261872174e3b.jpeg)
4. 如何使用?
使用 go get 命令下载我们的发布的模块
$ go get github.com/BingmingWong/goutils
![4f04744a986db0ea9a615e8c0f1b2a8f.png](https://i-blog.csdnimg.cn/blog_migrate/6a2ed9dd4cf3ffa2f77afa3a9cd30ae0.jpeg)
再使用 tree 命令,查看一下我们下载的包已经放入了 $GOPATH/pkg/mod
下。
有一点很有趣的是,我的 Github 用户名(BingmingWong)是有大写字母的,下载下来后,在目录中大写字母
会对应变成 !小写字母
,如下所示
![11f242db52735d89e15b125ca92ba258.png](https://i-blog.csdnimg.cn/blog_migrate/2055d3c62443f5ff67ed651696fcb91e.jpeg)
这个用户名看起来有点非主流,你要想改的话,也是可以的。如果你有其他的开源项目,github 并不会为你做重定向,你需要自己评估这个风险。
![12d8c5f6a4dcc7bce612649e9a00aa59.png](https://i-blog.csdnimg.cn/blog_migrate/c92beb3856772e48c82cb3a6f7805226.jpeg)
回过头来,我还是继续讲如何使用吧。
下载下来后,我们试着去调用一下他的函数,有一点需要注意的是,在这个示例里,你不能使用 github.com/BingmingWong/goutils
去导入,因为在这个目录下并没有 package
,所以你必须导入 github.com/BingmingWong/goutils/hash
。
整个过程如下所示,供你参考:
![f46740b8d9ddfabb6c025bb086ab9aa2.png](https://i-blog.csdnimg.cn/blog_migrate/94250a46b500452082a9535d571a1adc.jpeg)
本文参考学习自:https://studygolang.com/articles/22851
好了,今天的文章就到这里了。
若今天的分享对你有帮助,不如点个赞,支持一下?