Getting started with multi-module workspaces

這一章介紹Go語言多模塊工作空間的基礎概念,我們會在共享的多模塊工作空間創(chuàng)建兩個模塊并修改它們,從而在構(gòu)建程序過程中觀察它們的變化撼玄。

前提條件

  • Go語言版本1.18或更新
  • 代碼編輯工具
  • 命令行終端

創(chuàng)建第一個模塊

  1. 在根目錄創(chuàng)建一個名為workspace的目錄,并且在workspace目錄下創(chuàng)建hello目錄,并且在hello目錄下使用go mod init初始化hello模塊
$ cd
$ mkdir workspace
$ cd workspace
$ mkdir hello
$ cd hello
$ go mod init example.com/hello

我們要創(chuàng)建一個依賴于golang.org/x/example模塊的hello模塊,所以要先獲取golang.org/x/example模塊到本地,(這一步操作需要在hello目錄下執(zhí)行,因為go get 首先會要在當前目錄找到go.mod-go mod init命令生成禾唁,否則會報錯)

$ go get golang.org/x/example 
  1. 編寫hello.go代碼如下:
package main

import (
    "fmt"

    "golang.org/x/example/stringutil"
)

func main() {
    fmt.Println(stringutil.Reverse("Hello")) //調(diào)用example模塊中stringutil包里的reverse()方法對字符串進行翻轉(zhuǎn)
}

執(zhí)行g(shù)o run命令得到一下輸出結(jié)果:

$ go run example.com/hello
olleH

創(chuàng)建工作空間

上面我們只是創(chuàng)建了一個名為workspace的目錄,要創(chuàng)建Go語言的工作空間需要執(zhí)行g(shù)o work init命令些膨,它會生成一個go.work文件
在workspace目錄執(zhí)行g(shù)o work init ./hello命令

$ go work init ./hello

go work init命令會在workspace目錄下生成一個名為go.work的文件蟀俊,它的語法類似go.mod,它告訴Go語言編譯器創(chuàng)建一個包含了hello目錄下的模塊的go.wor文件订雾。go.work文件指出了當前的workspace引用了哪些目錄下的模塊肢预。
它的內(nèi)容如下:

go 1.18

use (
        ./example
        ./hello
)

當工作空間初始化完成之后,你就可以在workspace目錄下執(zhí)行g(shù)o run example.com/hello命令洼哎,并能得到和在hello目錄下執(zhí)行一樣的結(jié)果烫映。
下一節(jié)我們要下載golang.org/x/example模塊的Git倉庫到本地并且添加到我們的工作空間中進行修改,再用我們自己創(chuàng)建的模塊來訪問修改的內(nèi)容噩峦。

下載并修改golang.org/x/example模塊

  1. 使用git clone從Git倉庫下載golang.org/x/example模塊到本地(由于眾所周的原因go.googlesource.com/example下載不了锭沟,把go.googlesource.com替換成github.com/golang的地址就可以了),在workspace目錄下執(zhí)行下面的命令:(可是有時候github也會訪問不了识补,可以用它的替換地址:https://hub.fastgit.xyz)(這里有一點我還沒有完全搞清楚:用git clone下載到本地族淮,和前一章使用go get更新go.mod文件的區(qū)別是否是go get更新go.mod文件運行程序時,會在線加載example模塊的代碼,而git clone加載的是本地代碼祝辣?)
$ git clone https://github.com/golang/example
$ git clone https://hub.fastgit.xyz/golang/example
  1. 在下載到本地的example/stringutil目錄下新建一個go文件toupper.go贴妻,用來對輸入的字母進行大寫轉(zhuǎn)換
package stringutil

import "unicode"

// ToUpper uppercases all the runes in its argument string.
func ToUpper(s string) string {
    r := []rune(s)
    for i := range r {
        r[i] = unicode.ToUpper(r[i])
    }
    return string(r)
}
  1. 然后我們在hello.go中調(diào)用新創(chuàng)建的ToUpper()函數(shù)
package main

import (
    "fmt"

    "golang.org/x/example/stringutil"
)

func main() {
    fmt.Println(stringutil.ToUpper("Hello"))
}
  1. 執(zhí)行g(shù)o run命令觀察輸入結(jié)果:
$ go run example.com/hello
HELLO

go.work可以被用來代替replace命令來處理多模塊調(diào)用。
更多詳細的關(guān)于工作空間的內(nèi)容請參考 :Workspaces

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝙斜,一起剝皮案震驚了整個濱河市名惩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孕荠,老刑警劉巖娩鹉,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異稚伍,居然都是意外死亡弯予,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門个曙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熙涤,“玉大人,你說我怎么就攤上這事困檩。” “怎么了那槽?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵悼沿,是天一觀的道長。 經(jīng)常有香客問我骚灸,道長糟趾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任甚牲,我火速辦了婚禮义郑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丈钙。我一直安慰自己非驮,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布雏赦。 她就那樣靜靜地躺著劫笙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪星岗。 梳的紋絲不亂的頭發(fā)上填大,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音俏橘,去河邊找鬼允华。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的靴寂。 我是一名探鬼主播磷蜀,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榨汤!你這毒婦竟也來了蠕搜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤收壕,失蹤者是張志新(化名)和其女友劉穎妓灌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜜宪,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡虫埂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了圃验。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掉伏。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖澳窑,靈堂內(nèi)的尸體忽然破棺而出斧散,到底是詐尸還是另有隱情,我是刑警寧澤摊聋,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布鸡捐,位于F島的核電站,受9級特大地震影響麻裁,放射性物質(zhì)發(fā)生泄漏箍镜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一煎源、第九天 我趴在偏房一處隱蔽的房頂上張望色迂。 院中可真熱鬧,春花似錦手销、人聲如沸歇僧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馏慨。三九已至,卻和暖如春姑隅,著一層夾襖步出監(jiān)牢的瞬間写隶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工讲仰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慕趴,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像冕房,于是被迫代替她去往敵國和親躏啰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • go的多模塊工作區(qū)是從1.18 版本開始的耙册,所以要使用它首先要確認go 的版本给僵。 一下教程介紹了一個多模塊工作區(qū)的...
    husky_1閱讀 4,524評論 0 2
  • 一,module的來源定義 go1.11和go1.12對golang的 module做了一個試水详拙,從go1.13開...
    舒小賤閱讀 1,519評論 0 0
  • 為什么要學 Go 性能優(yōu)越感帝际;Go 極其地快,其性能與 Java 或 C++相似饶辙。在使用中蹲诀,Go 一般比 Pyth...
    drunkery閱讀 313評論 1 1
  • 在學完 Go 的語法之后,就可以開始寫代碼了弃揽,但一個項目中不可能只有幾個代碼文件脯爪,而是由很多代碼組成,下面這篇文章...
    rayjun閱讀 1,626評論 0 4
  • Go的1.11和1.12版本包括對模塊--新的Go依賴管理系統(tǒng)的初步支持矿微,使依賴版本信息變得明確且更易于管理痕慢。這篇...
    Java天天閱讀 2,791評論 0 1