<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何開源自己的 Go 庫

          共 796字,需瀏覽 2分鐘

           ·

          2022-04-14 12:20

          點(diǎn)擊上方“Go語言進(jìn)階學(xué)習(xí)”,進(jìn)行關(guān)注

          回復(fù)“Go語言”即可獲贈(zèng)從入門到進(jìn)階共10本電子書

          他鄉(xiāng)生白發(fā),舊國(guó)見青山。

          我們?cè)陂_發(fā) Go 項(xiàng)目時(shí),經(jīng)常會(huì)使用到一些外部依賴包。它們一般都是通過形如go get example.com/xxx的命令形式獲取到本地使用。

          本著開源精神,如果我們想將自己開發(fā)的包共享出去,讓其他人也能使用go get命令獲取到它們,應(yīng)該如何做呢?

          本文將以開源至 Github 平臺(tái)為例,展示其流程。

          建立倉(cāng)庫

          首先,在 github 平臺(tái)建立倉(cāng)庫,設(shè)置想要開源的 Go 庫名。這里將項(xiàng)目名取為 publishdemo,狀態(tài)為 Public。

          開發(fā)模塊代碼

          將創(chuàng)建好的倉(cāng)庫,通過 git clone 命令拉取至本地開發(fā)。

          $?git?clone[email protected]:golangShare/publishdemo.git

          此時(shí),在項(xiàng)目根目錄publishdemo/下,僅包含了 LICENSE 和 README 文件,不包含任何 Go 代碼。

          $?ls
          LICENSE???README.md

          為項(xiàng)目初始化 mod 文件

          $?go?mod?init?github.com/golangShare/publishdemo

          假設(shè),我們想開源的 Go 工具類的庫,此時(shí)準(zhǔn)備先提供的是對(duì)字符串相關(guān)的操作。因此在publishdemo/目錄下,我們新增stringutil/子目錄,在子目錄中增加 reverse.go 文件,其內(nèi)容如下。

          package?stringutil

          //?Reverse?returns?its?argument?string?reversed?rune-wise?left?to?right.
          func?Reverse(s?string)?string?{
          ?r?:=?[]rune(s)
          ?for?i,?j?:=?0,?len(r)-1;?i?len(r)/2;?i,?j?=?i+1,?j-1?{
          ??r[i],?r[j]?=?r[j],?r[i]
          ?}
          ?return?string(r)
          }

          很簡(jiǎn)單,我們想提供的是一個(gè)翻轉(zhuǎn)字符串功能函數(shù)。

          當(dāng)然,我們也應(yīng)該提供測(cè)試代碼。在同級(jí)目錄增加 reverse_test.go 文件,其內(nèi)容如下。

          package?stringutil

          import?"testing"

          func?TestReverse(t?*testing.T)?{
          ?for?_,?c?:=?range?[]struct?{
          ??in,?want?string
          ?}{
          ??{"Hello,?world",?"dlrow?,olleH"},
          ??{"Hello,?世界",?"界世?,olleH"},
          ??{"",?""},
          ?}?{
          ??got?:=?Reverse(c.in)
          ??if?got?!=?c.want?{
          ???t.Errorf("Reverse(%q)?==?%q,?want?%q",?c.in,?got,?c.want)
          ??}
          ?}
          }

          回到項(xiàng)目根目錄,此時(shí),代碼結(jié)構(gòu)如下

          .
          ├──?LICENSE
          ├──?README.md
          ├──?go.mod
          └──?stringutil
          ????├──?reverse.go
          ????└──?reverse_test.go

          1?directory,?5?files

          測(cè)試代碼也都通過

          $?go?test?./...
          ok???github.com/golangShare/publishdemo/stringutil?0.005s

          開發(fā)完成,我們就可以將工具庫共享出去了。

          發(fā)布

          為了避免模塊中還記錄了不再需要的依賴項(xiàng),執(zhí)行 go mod tidy 移除它們。

          $?go?mod?tidy

          使用 git tag 命令標(biāo)記版本信息

          $?git?commit?-m?"add?Reverse:?for?v0.1.0"
          $?git?tag?v0.1.0

          將其 push 至遠(yuǎn)程倉(cāng)庫

          $?git?push?origin?v0.1.0

          使用

          發(fā)布之后,其他項(xiàng)目就可以通過以下命令獲取我們開源的 Go 包了。

          $?go?get?github.com/golangShare/[email protected]

          此時(shí)項(xiàng)目 go.mod 文件中,將會(huì)增加以下一行記錄

          require?github.com/golangShare/publishdemo?v0.1.0

          和其他三方庫一樣的方式使用即可

          package?main

          import?(
          ?"fmt"
          ?"github.com/golangShare/publishdemo/stringutil"
          )

          func?main()?{
          ?s?:=?stringutil.Reverse("hello?gopher")
          ?fmt.Println(s)
          }

          總結(jié)

          看完了上述流程,可以發(fā)現(xiàn):開源自己的 Go 庫,其實(shí)非常簡(jiǎn)單。

          但還是有些地方需要注意一下:

          • 不要在開源的 mod 文件中記錄不需要的依賴。
          • 即使發(fā)現(xiàn) bug,也不要更改已發(fā)布版本的代碼,而應(yīng)該發(fā)布新版本。
          • 遵循版本命名規(guī)范,推薦參考 Module version numbering 一文:https://go.dev/doc/modules/version-numbers 一文



          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Go學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬水千山總是情,點(diǎn)個(gè)【在看】行不行

          瀏覽 41
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩无码一区二 | 婷婷五月天色色片 | 日本特黄 AA片免费视频 | 精品久久2024 | 欧美第一页精品 |