面試官:你有自己的開源庫(kù)么?
本文轉(zhuǎn)載自微信公眾號(hào)「GoLang全棧」,作者小錕哥哥。轉(zhuǎn)載本文請(qǐng)聯(lián)系GoLang全棧公眾號(hào)。
面對(duì)一個(gè)新功能,我們一般第一想到的就是有沒(méi)有這樣的庫(kù)可以直接使用呀?
所以,我們?cè)陂_發(fā)中做的最多的就是拉庫(kù)。
但是隨著我們代碼越寫越牛,往往會(huì)有很多自己常用的庫(kù),很多人可能就是在下一個(gè)項(xiàng)目里面去拷貝上一個(gè)項(xiàng)目里面的代碼。
但是這樣貌似不太高級(jí)。
我們是否可以像別的大牛一樣,發(fā)布自己的庫(kù)給別人用呢?
答案是肯定的。
于是這篇文章我們就來(lái)一步一步的帶大家把自己的庫(kù)發(fā)布到 Github 上。
新建項(xiàng)目
首先我們需要在 Github 上新建一個(gè)公開項(xiàng)目:
這里一定要選 Public 類型,否則常規(guī)的 go get 拉取代碼時(shí)會(huì)無(wú)法拉取。
項(xiàng)目名字你隨意,我這里就叫 kud 隨便取的。
準(zhǔn)備代碼
我們新建一個(gè)項(xiàng)目,在里面初始化好 go mod,我想現(xiàn)在庫(kù)管理的,應(yīng)該沒(méi)有用其他的工具了吧。
在項(xiàng)目下面執(zhí)行:
go mod init github.com/GoLangStackDev/kud
這里的 github.com/GoLangStackDev/kud 是你的倉(cāng)庫(kù)地址,在你新建倉(cāng)庫(kù)后的提示頁(yè)面里面可以看到:
記住不要帶上 .git !!!
記住不要帶上 .git !!!
記住不要帶上 .git !!!
隨后你就能看到你的 go.mod 文件長(zhǎng)成了這樣:
module github.com/GoLangStackDev/kud
go 1.17
go 1.17 是我本地的 go 版本,可能和你的不一樣,這個(gè)不影響。
開始編寫代碼
到這里你就可以開始寫你的代碼了。
這里我就隨便寫點(diǎn)代碼,新建一個(gè) string.go 文件,寫入下面的代碼:
package kud
import (
"math/rand"
"time"
)
// GetRandomString 生成隨機(jī)字符串
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)
}
寫完后,就可以上傳到倉(cāng)庫(kù)里面了。
上傳代碼部分這里就省略了哈。
發(fā)版本
當(dāng)你代碼上傳成功后,就可以像使用其他三方庫(kù)一樣,直接 go get 拉取就好了。
但是這樣會(huì)有一個(gè)問(wèn)題,每次拉取他都會(huì)獲取你 master 分支里面的最新的代碼。
拉下來(lái)就像這樣:
$ go get github.com/GoLangStackDev/kud
go get: added github.com/GoLangStackDev/kud v0.0.0-20220111073608-36510a889cc4
他會(huì)默認(rèn)給你取名叫 v0.0.0版本。
怎么發(fā)版?
發(fā)版也很簡(jiǎn)單,只需要給你的代碼打 tag 就好了。
但是這個(gè) tag 版本的格式必須得是 vx.x.x 這樣的三位,否者 go mod 會(huì)找不到版本號(hào)。
如何打 tag 不做贅述:
我這里我給打了 v0.1.1 的 tag 。
此時(shí)我們就可以按版本拉代碼了:
$ go get github.com/GoLangStackDev/kud@v0.1.1
go get: upgraded github.com/GoLangStackDev/kud v0.0.0-20220111073608-36510a889cc4 => v0.1.1
使用
使用和別的庫(kù)沒(méi)任何區(qū)別:
package main
import (
"fmt"
"github.com/GoLangStackDev/kud"
)
func main() {
fmt.Println(kud.GetRandomString(3))
}
你學(xué)廢了嗎?
快去上傳你的庫(kù)吧!