面试官:你有自己的开源库么?

开源
面对一个新功能,我们一般第一想到的就是有没有这样的库可以直接使用呀?所以,我们在开发中做的最多的就是拉库。

本文转载自微信公众号「GoLang全栈」,作者小锟哥哥。转载本文请联系GoLang全栈公众号。

面对一个新功能,我们一般第一想到的就是有没有这样的库可以直接使用呀?

所以,我们在开发中做的最多的就是拉库。

但是随着我们代码越写越牛,往往会有很多自己常用的库,很多人可能就是在下一个项目里面去拷贝上一个项目里面的代码。

但是这样貌似不太高级。

我们是否可以像别的大牛一样,发布自己的库给别人用呢?

答案是肯定的。

于是这篇文章我们就来一步一步的带大家把自己的库发布到 Github 上。

新建项目

首先我们需要在 Github 上新建一个公开项目:

这里一定要选 Public 类型,否则常规的 go get 拉取代码时会无法拉取。

项目名字你随意,我这里就叫 kud 随便取的。

准备代码

我们新建一个项目,在里面初始化好 go mod,我想现在库管理的,应该没有用其他的工具了吧。

在项目下面执行:

go mod init github.com/GoLangStackDev/kud

这里的 github.com/GoLangStackDev/kud 是你的仓库地址,在你新建仓库后的提示页面里面可以看到:

记住不要带上 .git !!!

记住不要带上 .git !!!

记住不要带上 .git !!!

随后你就能看到你的 go.mod 文件长成了这样:

module github.com/GoLangStackDev/kud

go 1.17

go 1.17 是我本地的 go 版本,可能和你的不一样,这个不影响。

开始编写代码

到这里你就可以开始写你的代码了。

这里我就随便写点代码,新建一个 string.go 文件,写入下面的代码:

package kud

import (
"math/rand"
"time"
)

// GetRandomString 生成随机字符串
func GetRandomString(l int) string {
str := "23456789abcdefghijkmnpqrstuvwxyz"
bytes := []byte(str)
result := []byte{}
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < l; i++ {
result = append(result, bytes[r.Intn(len(bytes))])
}
return string(result)
}

写完后,就可以上传到仓库里面了。

上传代码部分这里就省略了哈。

发版本

当你代码上传成功后,就可以像使用其他三方库一样,直接 go get 拉取就好了。

但是这样会有一个问题,每次拉取他都会获取你 master 分支里面的最新的代码。

拉下来就像这样:

$ go get github.com/GoLangStackDev/kud
go get: added github.com/GoLangStackDev/kud v0.0.0-20220111073608-36510a889cc4

他会默认给你取名叫 v0.0.0版本。

怎么发版?

发版也很简单,只需要给你的代码打 tag 就好了。

但是这个 tag 版本的格式必须得是 vx.x.x 这样的三位,否者 go mod 会找不到版本号。

如何打 tag 不做赘述:

我这里我给打了 v0.1.1 的 tag 。

此时我们就可以按版本拉代码了:

$ go get github.com/GoLangStackDev/kud@v0.1.1
go get: upgraded github.com/GoLangStackDev/kud v0.0.0-20220111073608-36510a889cc4 => v0.1.1

使用

使用和别的库没任何区别:

package main

import (
"fmt"
"github.com/GoLangStackDev/kud"
)

func main() {
fmt.Println(kud.GetRandomString(3))
}

你学废了吗?

快去上传你的库吧!


责任编辑:武晓燕 来源: GoLang全栈
相关推荐

2015-08-13 10:29:12

面试面试官

2023-02-20 08:08:48

限流算法计数器算法令牌桶算法

2015-08-24 09:00:36

面试面试官

2021-11-25 10:18:42

RESTfulJava互联网

2024-02-26 14:07:18

2021-09-26 10:57:16

集合操作场景

2024-04-19 00:00:00

计数器算法限流算法

2021-09-27 06:50:04

非线性数据

2021-08-09 07:47:40

Git面试版本

2022-02-07 20:18:29

Redis缓存装饰

2020-11-12 18:20:28

接口数据分布式

2022-08-02 06:31:32

Java并发工具类

2022-07-26 08:40:42

Java并发工具类

2024-03-07 17:21:12

HotSpotJVMHot Code

2024-04-02 09:45:27

线程池Executors开发

2020-12-01 08:47:36

Java异常开发

2020-06-12 15:50:56

options前端服务器

2019-06-06 10:55:02

JDK高并发框架

2021-07-06 07:27:45

React元素属性

2023-07-13 08:19:30

HaspMapRedis元素
点赞
收藏

51CTO技术栈公众号