go新工具gonew生成模板工具鏈?zhǔn)褂迷斀?/h1>
更新時間:2023年08月10日 14:24:50 作者:煎魚
這篇文章主要為大家介紹了go新工具gonew生成模板工具鏈?zhǔn)褂迷斀?有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
引言
不知道大家平時在日常工作中,會不會遇到一個問題?公司用著微服務(wù)架構(gòu),經(jīng)常要創(chuàng)建新的服務(wù),需要一個應(yīng)用模板去初始化新的服務(wù),減少 ctrl+c+v,轉(zhuǎn)為相對自動化。
不同團隊根據(jù) Leader 的喜好、要求不同,應(yīng)用模板又會不同。有的喜歡 DDD、有的喜歡 MVC、有的大道至簡即可。每家公司都會延伸出一個工具鏈做這個事情。
新工具:gonew 生成模板
在 Go 社區(qū)也出現(xiàn)了這種訴求,Go 核心團隊帶頭大哥 @Russ Cox 發(fā)起了一個新討論《gonew: templates for new modules》,引發(fā)了各方的熱議:

原因是:Go 團隊經(jīng)常收到用戶反饋要求使用某種 "go new" 功能,以某種基本模板啟動一個新的模塊(項目)。
這個工具不局限于 Go 團隊提供的模板,任何人都可以定義這個模板。這個模板也是很 “普通”,沒什么特殊的功能。
"go new" 的核心工作是下載一個模板,更改其模塊路徑,然后把它放到一個新的目錄中進行編輯。當(dāng)然這個工具鏈未來可能還有更多的功能,但這就是最核心的訴求。
也出現(xiàn)了一個新的場景。有一名圖書作者,希望能夠更方便的提供圖書示例,不想要圖書讀者費盡心思克隆一個 git 倉庫。答案顯而易見,那就是本文提到的 gonew 工具。
快速體驗和實操
結(jié)合前后事跡來看,@Russ Cox 是一個執(zhí)行效率比較高的人。提出討論的前幾個月,已經(jīng)寫好了工具給大家試用了。
安裝命令如下:
$ go install golang.org/x/tools/cmd/gonew@latest
go: downloading golang.org/x/tools v0.11.1
go: downloading golang.org/x/mod v0.12.0
創(chuàng)建命令如下:
$ gonew golang.org/x/example/hello
gonew: initialized golang.org/x/example/hello in ./hello
執(zhí)行完畢后,會在當(dāng)前目錄下,創(chuàng)建一個 hello 目錄(./hello)。模板的結(jié)構(gòu)如下:
$ tree hello
hello
├── LICENSE
├── go.mod
├── hello.go
└── reverse
├── example_test.go
├── reverse.go
└── reverse_test.go
1 directory, 6 files
我對比了一下,和模板基準(zhǔn)的 git 倉庫 github.com/golang/example
的相關(guān)代碼是一致的。
可能會有同學(xué)說,不行啊。我還要改 module path。這點在現(xiàn)在也是已經(jīng)支持的了。
如下命令:
$ gonew github.com/ServiceWeaver/template example.com/foo
gonew: initialized example.com/foo in ./foo
生成目錄:
$ tree foo
foo
├── LICENSE
├── README.md
├── go.mod
├── go.sum
├── main.go
├── weaver.toml
└── weaver_gen.go
對應(yīng)生成的目錄名是指定的 foo,創(chuàng)建出來的 go.mod 文件的 module path 是:module example.com/foo
。
符合上面提的要求。
一些討論
結(jié)合討論的內(nèi)容來看,大家的反饋都是比較積極支持的。因為確實看到社區(qū)里很多人為此做了一模一樣的事情,各語言都有,真的是各顯神通了。

有個別同學(xué)支持將本文提到的 go new 放到 go mod init 中,這樣就不需要再單獨創(chuàng)造一個新的命令集。
提出的同學(xué)認為 go mod init 本質(zhì)上也是在引導(dǎo) Go 應(yīng)用的使用,和 go new 比較類似??梢哉{(diào)整為:
go mod init example.com/x/abc --template github.com/ServiceWeaver/template
以此滿足一樣的訴求。
不過我感覺這命令就太長了,沒 go new 那么短小精悍。
總結(jié)
本次 go new 工具的討論和實驗,Go 團隊非常迅速。目測勢在必得,肯定會加進去了。
因為根據(jù)反饋 Google 的幾個團隊也有興趣嘗試使用 gonew 進行模板化。ServiceWeaver 團隊對此也非常感興趣。
功能雖然非常簡單,但基本滿足了不同的團隊為了不同的代碼模板,創(chuàng)建一個新的模板的訴求。一旦成熟,也就不需要人均手搓一個模板的腳手架工具了。
后續(xù)各自在工具鏈套一下就 OK,一個快速的小成果就好了
以上就是go新工具gonew生成模板工具鏈?zhǔn)褂玫脑敿殐?nèi)容,更多關(guān)于go gonew生成模板工具鏈的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
-
Go檢查結(jié)構(gòu)體中是否存在某個字段及創(chuàng)建結(jié)構(gòu)體切片或映射
這篇文章主要為大家介紹了Go檢查結(jié)構(gòu)體中是否存在某個字段及創(chuàng)建結(jié)構(gòu)體切片或映射實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪 2024-01-01
-
go語言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等
這篇文章主要為大家介紹了go語言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪 2022-12-12
-
Golang實現(xiàn)IP地址轉(zhuǎn)整數(shù)的方法詳解
在 Go 語言中,將 IP 地址轉(zhuǎn)換為整數(shù)涉及到解析 IP 地址并處理其字節(jié)表示,本文給大家介紹了Golang實現(xiàn)IP地址轉(zhuǎn)整數(shù)的方法,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下 2024-02-02
-
Golang哈希算法實現(xiàn)配置文件的監(jiān)控功能詳解
這篇文章主要介紹了Golang哈希算法實現(xiàn)配置文件的監(jiān)控功能,哈希和加密類似,唯一區(qū)別是哈希是單項的,即哈希后的數(shù)據(jù)無法解密,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧 2023-03-03
-
Go 類型轉(zhuǎn)化工具庫cast函數(shù)詳解
這篇文章主要介紹了Go 類型轉(zhuǎn)化工具庫cast函數(shù)詳解,cast 是在Github上開源的工具庫,就像他的名字一樣,他為我們提供了非常便捷的類型轉(zhuǎn)化的方法 2022-07-07
最新評論
引言
不知道大家平時在日常工作中,會不會遇到一個問題?公司用著微服務(wù)架構(gòu),經(jīng)常要創(chuàng)建新的服務(wù),需要一個應(yīng)用模板去初始化新的服務(wù),減少 ctrl+c+v,轉(zhuǎn)為相對自動化。
不同團隊根據(jù) Leader 的喜好、要求不同,應(yīng)用模板又會不同。有的喜歡 DDD、有的喜歡 MVC、有的大道至簡即可。每家公司都會延伸出一個工具鏈做這個事情。
新工具:gonew 生成模板
在 Go 社區(qū)也出現(xiàn)了這種訴求,Go 核心團隊帶頭大哥 @Russ Cox 發(fā)起了一個新討論《gonew: templates for new modules》,引發(fā)了各方的熱議:
原因是:Go 團隊經(jīng)常收到用戶反饋要求使用某種 "go new" 功能,以某種基本模板啟動一個新的模塊(項目)。
這個工具不局限于 Go 團隊提供的模板,任何人都可以定義這個模板。這個模板也是很 “普通”,沒什么特殊的功能。
"go new" 的核心工作是下載一個模板,更改其模塊路徑,然后把它放到一個新的目錄中進行編輯。當(dāng)然這個工具鏈未來可能還有更多的功能,但這就是最核心的訴求。
也出現(xiàn)了一個新的場景。有一名圖書作者,希望能夠更方便的提供圖書示例,不想要圖書讀者費盡心思克隆一個 git 倉庫。答案顯而易見,那就是本文提到的 gonew 工具。
快速體驗和實操
結(jié)合前后事跡來看,@Russ Cox 是一個執(zhí)行效率比較高的人。提出討論的前幾個月,已經(jīng)寫好了工具給大家試用了。
安裝命令如下:
$ go install golang.org/x/tools/cmd/gonew@latest go: downloading golang.org/x/tools v0.11.1 go: downloading golang.org/x/mod v0.12.0
創(chuàng)建命令如下:
$ gonew golang.org/x/example/hello gonew: initialized golang.org/x/example/hello in ./hello
執(zhí)行完畢后,會在當(dāng)前目錄下,創(chuàng)建一個 hello 目錄(./hello)。模板的結(jié)構(gòu)如下:
$ tree hello hello ├── LICENSE ├── go.mod ├── hello.go └── reverse ├── example_test.go ├── reverse.go └── reverse_test.go 1 directory, 6 files
我對比了一下,和模板基準(zhǔn)的 git 倉庫 github.com/golang/example
的相關(guān)代碼是一致的。
可能會有同學(xué)說,不行啊。我還要改 module path。這點在現(xiàn)在也是已經(jīng)支持的了。
如下命令:
$ gonew github.com/ServiceWeaver/template example.com/foo gonew: initialized example.com/foo in ./foo
生成目錄:
$ tree foo foo ├── LICENSE ├── README.md ├── go.mod ├── go.sum ├── main.go ├── weaver.toml └── weaver_gen.go
對應(yīng)生成的目錄名是指定的 foo,創(chuàng)建出來的 go.mod 文件的 module path 是:module example.com/foo
。
符合上面提的要求。
一些討論
結(jié)合討論的內(nèi)容來看,大家的反饋都是比較積極支持的。因為確實看到社區(qū)里很多人為此做了一模一樣的事情,各語言都有,真的是各顯神通了。
有個別同學(xué)支持將本文提到的 go new 放到 go mod init 中,這樣就不需要再單獨創(chuàng)造一個新的命令集。
提出的同學(xué)認為 go mod init 本質(zhì)上也是在引導(dǎo) Go 應(yīng)用的使用,和 go new 比較類似??梢哉{(diào)整為:
go mod init example.com/x/abc --template github.com/ServiceWeaver/template
以此滿足一樣的訴求。
不過我感覺這命令就太長了,沒 go new 那么短小精悍。
總結(jié)
本次 go new 工具的討論和實驗,Go 團隊非常迅速。目測勢在必得,肯定會加進去了。
因為根據(jù)反饋 Google 的幾個團隊也有興趣嘗試使用 gonew 進行模板化。ServiceWeaver 團隊對此也非常感興趣。
功能雖然非常簡單,但基本滿足了不同的團隊為了不同的代碼模板,創(chuàng)建一個新的模板的訴求。一旦成熟,也就不需要人均手搓一個模板的腳手架工具了。
后續(xù)各自在工具鏈套一下就 OK,一個快速的小成果就好了
以上就是go新工具gonew生成模板工具鏈?zhǔn)褂玫脑敿殐?nèi)容,更多關(guān)于go gonew生成模板工具鏈的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go檢查結(jié)構(gòu)體中是否存在某個字段及創(chuàng)建結(jié)構(gòu)體切片或映射
這篇文章主要為大家介紹了Go檢查結(jié)構(gòu)體中是否存在某個字段及創(chuàng)建結(jié)構(gòu)體切片或映射實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01go語言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等
這篇文章主要為大家介紹了go語言題解LeetCode453最小操作次數(shù)使數(shù)組元素相等示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12Golang實現(xiàn)IP地址轉(zhuǎn)整數(shù)的方法詳解
在 Go 語言中,將 IP 地址轉(zhuǎn)換為整數(shù)涉及到解析 IP 地址并處理其字節(jié)表示,本文給大家介紹了Golang實現(xiàn)IP地址轉(zhuǎn)整數(shù)的方法,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下2024-02-02Golang哈希算法實現(xiàn)配置文件的監(jiān)控功能詳解
這篇文章主要介紹了Golang哈希算法實現(xiàn)配置文件的監(jiān)控功能,哈希和加密類似,唯一區(qū)別是哈希是單項的,即哈希后的數(shù)據(jù)無法解密,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-03-03Go 類型轉(zhuǎn)化工具庫cast函數(shù)詳解
這篇文章主要介紹了Go 類型轉(zhuǎn)化工具庫cast函數(shù)詳解,cast 是在Github上開源的工具庫,就像他的名字一樣,他為我們提供了非常便捷的類型轉(zhuǎn)化的方法2022-07-07