Hi,你们好,我是明哥。git
在本身学习 Golang 的这段时间里,我写了详细的学习笔记放在个人我的微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,所以写的东西应该会比较适合刚接触的同窗,若是你也是刚学习 Go 语言,不防关注一下,一块儿学习,一块儿成长。github
个人在线博客:golang.iswbm.com 个人 Github:github.com/iswbm/GolangCodingTimegolang
一般以前的学习,咱们知道了在 Go 的项目中,能够 import 一个托管在远程仓库的模块,这个模块在咱们使用 go get 的时候,会下载到本地。shell
既然是放在远程仓库上,意味着全部人均可以发布,而且因此人也均可以使用。编程
今天就来学习一下,如何发布一个开源的模块,而且使用它。数组
先在你的 Github 上新建一个仓库,记得选 Public(默认)微信
而后你会获得一个仓库地址,在你的电脑上 使用 git clone
命令克隆下来函数
使用前面学过的 go mod init 命令进行初始化,注意这里的模块名,填写咱们的git仓库地址(可是要去掉.git
哈)工具
$ git clone https://github.com/BingmingWong/goutils.git
$ go mod init github.com/BingmingWong/goutils复制代码
而后新建一个 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复制代码
一切完成后,刷新咱们的仓库,就能够看到咱们的刚刚上传的项目代码了,点击 release 发布一个版本
而后像下图同样,添加一些版本说明
最后点击一个 Publish release
,就发布了一个版本
使用 go get 命令下载咱们的发布的模块
$ go get github.com/BingmingWong/goutils复制代码
再使用 tree 命令,查看一下咱们下载的包已经放入了 $GOPATH/pkg/mod
下。
有一点颇有趣的是,个人 Github 用户名(BingmingWong)是有大写字母的,下载下来后,在目录中大写字母
会对应变成 !小写字母
,以下所示
这个用户名看起来有点非主流,你要想改的话,也是能够的。若是你有其余的开源项目,github 并不会为你作重定向,你须要本身评估这个风险。
回过头来,我仍是继续讲如何使用吧。
下载下来后,咱们试着去调用一下他的函数,有一点须要注意的是,在这个示例里,你不能使用 github.com/BingmingWong/goutils
去导入,由于在这个目录下并无 package
,因此你必须导入 github.com/BingmingWong/goutils/hash
。
整个过程以下所示,供你参考:
本文参考学习自:studygolang.com/articles/22…
系列导读
24. 超详细解读 Go Modules 前世此生及入门使用