日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

快速掌握 Go 工作區模式

來源: 責編: 時間:2023-09-28 10:09:29 457觀看
導讀大家好,我是煎魚。在 Go 項目的模塊管理中,先是 GOPATH,然后到廢棄。再到強推 Go modules,從被社區抗拒到 rsc 硬上弓。現在最新要了解的,就是工作區模式(workspace mode)。這是一個在 Go1.18 引入的重要特性。之前一直沒提

大家好,我是煎魚。Cpt28資訊網——每日最新資訊28at.com

在 Go 項目的模塊管理中,先是 GOPATH,然后到廢棄。再到強推 Go modules,從被社區抗拒到 rsc 硬上弓。現在最新要了解的,就是工作區模式(workspace mode)。這是一個在 Go1.18 引入的重要特性。Cpt28資訊網——每日最新資訊28at.com

之前一直沒提過,今天補全這塊的知識點。Cpt28資訊網——每日最新資訊28at.com

背景

在 Go1.11 起有了 Go modules 后,看起來 Go 模塊管理逐步按序有了約束、規范了起來。但也帶來了一些使用上的問題。Cpt28資訊網——每日最新資訊28at.com

現實開發時,當我們需要對多個關聯模塊進行開發(修改)時,這個事情就麻煩了起來。我見過兩種方式。Cpt28資訊網——每日最新資訊28at.com

1、第一種:直接在 go.mod 文件上配置 replace,配置到本地的開發目錄。這是最常見的方式。Cpt28資訊網——每日最新資訊28at.com

// go.modreplace example.com/golang/text => "../eddycjy/golang/text"

這種做法經常會有人不小心提交到 Git 倉庫上。還挺折騰人的,一個不小心就為此 debug 了半天,或者發布部署一直卡著過不去。Cpt28資訊網——每日最新資訊28at.com

2、第二種:直接在依賴模塊上編碼,編碼到一定的程度。才上傳 GitHub/GitLab。再去發布版本標簽再引用。這種用法比較少,只有模塊比較簡單且對程序比較自信的會這么干。(不推薦)Cpt28資訊網——每日最新資訊28at.com

總的來講,就是有了 Go modules 后,多模塊間的依賴開發還是挺麻煩的。要經常 replace,有時候又會忘了刪。Cpt28資訊網——每日最新資訊28at.com

go work 指令集

在大家痛苦了許久后,Go1.18 時終于發布了工作區模式的方式,來優化這個用法和問題。Cpt28資訊網——每日最新資訊28at.com

以下是 go work 的指令集:Cpt28資訊網——每日最新資訊28at.com

go work <command> [arguments]
  • edit:從工具或腳本中編輯 go.work。
  • init:初始化工作區文件(go.work)。
  • sync:將工作區構建列表同步到模塊。
  • use:將模塊添加到工作區文件。

快速使用

接下來我們快速應用 Go 工作區模式,讓大家有個直觀的了解。Cpt28資訊網——每日最新資訊28at.com

需要注意,該特性需要確保 Go 版本 >= 1.18。Cpt28資訊網——每日最新資訊28at.com

創建工作區

首先我們創建一個工作區,執行如下命令:Cpt28資訊網——每日最新資訊28at.com

$ mkdir workspace-main && cd workspace-main $ go work init

執行完畢后會在該目錄下創建一個 go.work 文件,文件內容包含:Cpt28資訊網——每日最新資訊28at.com

go 1.20

僅包含版本信息,因為當前是空白的工作區,只有初始化行為。Cpt28資訊網——每日最新資訊28at.com

創建演示模塊

$ mkdir hello-world && cd hello-world$ go mod init example.com/hellogo: creating new go.mod: module example.com/hello

寫入代碼 hello.go:Cpt28資訊網——每日最新資訊28at.com

package mainimport ( "fmt" "golang.org/x/example/hello/reverse")func main() { fmt.Println(reverse.String("Hello, 煎魚"))}

如果你這時候直接 go run。可能會出現如下報錯:Cpt28資訊網——每日最新資訊28at.com

hello.go:6:5: no required module provides package golang.org/x/example/hello/reverse: go.mod file not found in current directory or any parent directory; see 'go help modules'

看著非常迷惑人,很多同學以為是環境變量 GO111MODULE 沒有設置為 on。其實是沒有將本模塊加入工作區中,導致運行錯誤。Cpt28資訊網——每日最新資訊28at.com

所以可以看出來,在設計上是先有項目,再有工作區的路徑。也是相對符合的。Cpt28資訊網——每日最新資訊28at.com

這時候需要回到工作區目錄 workspace-main。執行如下命令:Cpt28資訊網——每日最新資訊28at.com

go work use ./hello-world

go.work 文件內會變成:Cpt28資訊網——每日最新資訊28at.com

$ cat go.work go 1.20use ./hello-world

再運行程序:Cpt28資訊網——每日最新資訊28at.com

$ go run hello-world/hello.go 魚煎 ,olleH

一切正常。Cpt28資訊網——每日最新資訊28at.com

創建需修改的模塊

這時候我們有了一個實際的訴求,我們希望 golang.org/x/example/hello 改一下這個 SDK 庫。Cpt28資訊網——每日最新資訊28at.com

如果是以前的話,我們需要寫 replace 來解決。現在的話可以用工作區模式來完成這個訴求。Cpt28資訊網——每日最新資訊28at.com

我們先需要回到工作區根目錄 workspace-main 下,拉取這個 SDK 庫到工作區中:Cpt28資訊網——每日最新資訊28at.com

git clone https://go.googlesource.com/example

再將其引入項目的工作區中:Cpt28資訊網——每日最新資訊28at.com

go work use ./example/hello

go.work 文件會變成:Cpt28資訊網——每日最新資訊28at.com

go 1.20use ( ./example/hello ./hello-world)

這里需要注意,go work 以 go.mod 為單位。如果你直接引入 ./example。是無法對 ./example/hello 的 module 起效果的。Cpt28資訊網——每日最新資訊28at.com

在引入成功后,我們回到 ./example/hello 目錄下的 reverse.go 文件,新增一個用于 Demo 的方法:Cpt28資訊網——每日最新資訊28at.com

...func Hello() string { return "煎魚,你好!"}

再到 hello 項目中,新增調用:Cpt28資訊網——每日最新資訊28at.com

package mainimport ( "fmt" "golang.org/x/example/hello/reverse")func main() { fmt.Println(reverse.String("Hello, 煎魚")) fmt.Println(reverse.Hello())}

輸出結果:Cpt28資訊網——每日最新資訊28at.com

魚煎 ,olleH煎魚,你好

一切正常。滿足不添加 replace 的要求,也使用了 go.work,不用擔心把 replace 不小心提交到 Git 倉庫中。Cpt28資訊網——每日最新資訊28at.com

另外 Go 工作區中的項目在進行編譯時,也是引用所配置好的工作區內的模塊。而不是單單只針對開發階段的 go run,也可以在產線上去使用,編譯成二進制去應用和部署。Cpt28資訊網——每日最新資訊28at.com

場景匯總

我們已經對 Go 的工作區模式有了一定的了解,其使用場景聚焦在如下:Cpt28資訊網——每日最新資訊28at.com

  • 開發較大的產品,其項目存在著多個互相依賴的模塊。可以直接設置成一個工作區。
  • 開發第三方庫(類似 SDK 庫),需要對上游的模塊新增新特性。勢必要在本地模塊先引用做開發、測試、驗證。也可以直接使用工作區。

總結

今天我們快速了解了 Go 工作區模式(workspace mode)的背景、使用、場景。這對于解決項目中多模塊依賴有著一定的作用,可以不再需要去 go.mod 里 replace,算是給了一個規范化的解決方案。Cpt28資訊網——每日最新資訊28at.com

但在實際應用中,我們會發現工作區模式的便利度,其實不太高。可能依賴模塊數量少時,還不如 replace 一把梭來得快。Cpt28資訊網——每日最新資訊28at.com

另外目前階段的使用宣傳還是做得比較弱的,前兩天問了一圈,還真有一些同學不知道,也沒有用過的。Cpt28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-11897-0.html快速掌握 Go 工作區模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何快速使用Docker部署我們的微服務

下一篇: 解密DDD:領域事件這一系統解耦的終極武器

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
精品91免费| 欧美精品免费视频| 亚洲影院在线观看| 午夜亚洲激情| 久久久久久国产精品mv| 每日更新成人在线视频| 欧美日本不卡高清| 国产精品日韩在线一区| 国产日韩欧美二区| 有码中文亚洲精品| 亚洲精品久久嫩草网站秘色| 亚洲欧洲视频| 亚洲视频自拍偷拍| 久久狠狠婷婷| 欧美—级高清免费播放| 欧美日韩一区二区在线| 国产精品专区一| 永久555www成人免费| 夜夜夜精品看看| 久久不射2019中文字幕| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产美女精品免费电影| 在线日韩欧美| 亚洲一区欧美激情| 老司机aⅴ在线精品导航| 欧美特黄a级高清免费大片a级| 国产亚洲在线观看| 夜夜嗨av一区二区三区网站四季av | 午夜国产不卡在线观看视频| 久久久五月天| 国产精品国产a级| 亚洲国产精品成人va在线观看| 中文欧美在线视频| 久久资源在线| 国产精品亚洲综合久久| 91久久久久久| 欧美中文在线观看| 欧美三区美女| 亚洲国产精品小视频| 亚洲一区高清| 欧美成人精品h版在线观看| 国产精品一区二区你懂得| 亚洲区免费影片| 久久久久国产一区二区三区四区| 欧美午夜视频在线观看| 亚洲激情欧美| 久久久一区二区| 国产精品一级| 亚洲视频狠狠| 欧美激情在线播放| 伊人久久亚洲热| 欧美在线三级| 国产精品丝袜91| 一区二区三区 在线观看视| 美女91精品| 国内精品免费在线观看| 亚洲欧美日韩在线播放| 欧美日韩大片一区二区三区| 亚洲高清在线视频| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品美女诱惑| 亚洲天堂av在线免费| 欧美精品在线网站| 91久久精品日日躁夜夜躁国产| 久久久天天操| 极品日韩久久| 久久国产手机看片| 国产日韩欧美在线| 亚洲综合999| 国产精品av久久久久久麻豆网| 亚洲乱码国产乱码精品精天堂 | 另类av导航| 韩国av一区二区| 久久国产一区| 国产亚洲a∨片在线观看| 亚洲欧美日韩一区二区三区在线观看| 国产精品vip| 亚洲一区二区三区免费在线观看| 欧美日韩午夜在线视频| 99国产精品久久久久老师 | 国产精品一区二区三区乱码| 亚洲午夜在线视频| 国产精品成人一区| 亚洲制服欧美中文字幕中文字幕| 欧美视频在线观看免费网址| 亚洲免费电影在线| 欧美日韩激情小视频| av成人激情| 欧美性事在线| 亚洲综合视频在线| 国产欧美日韩精品在线| 欧美一区二区大片| 国模精品一区二区三区| 久久激情视频久久| 在线播放中文一区| 欧美国产高潮xxxx1819| 亚洲免费播放| 国产精品欧美风情| 欧美在线播放一区| 精品999网站| 欧美电影在线免费观看网站| 亚洲精品无人区| 欧美视频在线免费看| 亚洲夜间福利| 国产日韩欧美日韩大片| 久久久久亚洲综合| 亚洲黄色毛片| 欧美视频导航| 欧美一级专区| 亚洲第一精品夜夜躁人人躁 | 国产精品久久午夜夜伦鲁鲁| 性xx色xx综合久久久xx| 激情文学一区| 欧美巨乳在线| 亚洲一区二区三区视频| 国产深夜精品福利| 麻豆成人av| 一区二区国产在线观看| 国产精品一二三| 久久综合狠狠综合久久综合88| 91久久在线视频| 国产精品美女久久久久久久| 久久国产精品网站| 亚洲日本一区二区| 国产精品视频第一区| 久久精品人人做人人综合| 亚洲黄色毛片| 国产精品一区二区黑丝| 浪潮色综合久久天堂| 一区二区三区视频在线播放| 国产欧美日韩综合一区在线观看| 久久嫩草精品久久久精品| 亚洲美洲欧洲综合国产一区| 国产精品一区久久| 女生裸体视频一区二区三区| 一区二区三区色| 韩日成人在线| 欧美三级电影大全| 久久久噜噜噜久久久| 夜夜爽夜夜爽精品视频| 国外成人网址| 欧美日韩亚洲一区三区| 久久久久国色av免费看影院 | 男女精品网站| 午夜电影亚洲| 亚洲日本无吗高清不卡| 国产日韩欧美在线播放不卡| 欧美激情中文字幕一区二区| 亚洲综合成人在线| 亚洲欧洲在线看| 国产婷婷成人久久av免费高清| 欧美国内亚洲| 欧美中文字幕在线观看| 一本色道**综合亚洲精品蜜桃冫| 狠狠色2019综合网| 国产精品成人在线观看| 欧美成人国产| 久久精品亚洲一区二区三区浴池 | 新67194成人永久网站| 日韩亚洲欧美在线观看| 国内精品久久久久久久97牛牛| 欧美日韩亚洲三区| 欧美r片在线| 久久精品首页| 亚洲男人av电影| 99国产一区| 伊人久久大香线蕉av超碰演员| 国产精品最新自拍| 欧美午夜精品伦理| 欧美精品黄色| 免费在线亚洲| 久久久久久精| 欧美一级久久| 亚洲综合日韩| 中文精品一区二区三区| 亚洲精品国产精品国自产在线 | 鲁大师影院一区二区三区| 欧美一区二区视频免费观看| 在线一区二区三区四区五区| 亚洲人被黑人高潮完整版| 狠狠色狠狠色综合日日小说| 国产精品影片在线观看| 国产精品精品视频| 欧美色视频一区| 欧美日韩国产三级| 欧美电影免费观看大全| 玖玖玖国产精品| 久久精品首页| 久久国产精品久久久久久久久久 | 亚洲一级免费视频| 一本一本大道香蕉久在线精品| 亚洲国产美女| 亚洲第一精品福利| 一区三区视频| 伊人久久婷婷| 亚洲国产成人av在线| 欲色影视综合吧| 在线免费不卡视频| 亚洲第一精品福利| 亚洲人午夜精品免费| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲国产一区视频| 亚洲精品免费一二三区| 亚洲精品乱码久久久久久蜜桃91 |