『No6: Go 項(xiàng)目組織』

golang-learning-six.png
6.png

大家好树酪,我叫謝偉浅碾,是一名程序員。

我們已經(jīng)研究了:


本節(jié)的主題是:項(xiàng)目組織、包導(dǎo)入耍贾、第三方庫(kù)下載 和 管理阅爽。

Golang 語(yǔ)言的庫(kù)區(qū)分內(nèi)置庫(kù)和第三方庫(kù)。內(nèi)置庫(kù)荐开,下載安裝Golang 既可以使用付翁,第三方庫(kù)的使用,我們需要獲取到本地晃听,再使用百侧。

包的導(dǎo)入和管理,講述的是在Golang 里如何進(jìn)行內(nèi)置庫(kù)的使用和第三方庫(kù)的導(dǎo)入使用能扒,管理則指的是在自己構(gòu)建的工程里如何管理第三方庫(kù)佣渴。

1. 工作空間

第一節(jié),我們已經(jīng)知道如何設(shè)置 GOPATH 初斑、GOROOT

  • GOPATH 即是項(xiàng)目的工程的目錄
  • GOROOT 即是go 源代碼的目錄

工作空間由:src辛润、bin、pkg 三個(gè)目錄組成见秤。通常會(huì)把空間的目錄設(shè)置為GOPATH砂竖。

大致的目錄結(jié)構(gòu)如下:

workspace
   src
       github.com
       op
   bin
   pkg

我們一般關(guān)心的是 src 目錄下的文件灵迫,包括:第三方庫(kù)和自己創(chuàng)建的項(xiàng)目

我們需要?jiǎng)?chuàng)建目錄就在GOPATH/src 下創(chuàng)建文件夾。

2. 包導(dǎo)入

  • 內(nèi)置包導(dǎo)入
  • 第三方包的導(dǎo)入

原則就是:在src 下的文件的路徑

比如:導(dǎo)入內(nèi)置包 fmt

import fmt

func main(){
   fmt.Println("hello world")
}

比如:導(dǎo)入第三方庫(kù) cli


import (
    "os"

    "github.com/urfave/cli"
)

func main() {
    app := cli.NewApp()
    app.Run(os.Args)
}

表示:cli 源代碼在:GOPATH/src/github.com/urfave/cli 路徑下

導(dǎo)入自己寫(xiě)的包:

import (
    "jianshu-go"
)

func main() {

    jianshu.NewSpecialSubject("")
}


表示:jianshu-go 在 GOPATH/src/jianshu-go

強(qiáng)調(diào)一點(diǎn):golang 中晦溪,使用到的包需要導(dǎo)入瀑粥,不使用的包導(dǎo)入,編譯過(guò)程會(huì)報(bào)錯(cuò)三圆。這一點(diǎn)和 python 很不一樣狞换。

好,上文已經(jīng)知道了包的導(dǎo)入:即以GOPATG/src 為基本路徑導(dǎo)入完整路徑即可舟肉。雖然 golang 也支持相對(duì)路徑導(dǎo)入修噪,但不建議。

上文是一種包的默認(rèn)導(dǎo)入方式路媚。還存在下面幾種:

  1. 別名
package main

import name "fmt"

func main() {
    name.Println()
}


即:重新給包命別名黄琼,上文中 name 替換了默認(rèn)的 fmt 名稱(chēng)

  1. 省略包名
package main

import . "fmt"

func main() {
    Println("hello world")
}

即:省略包名,用點(diǎn)號(hào)省略包名整慎。所以包內(nèi)的函數(shù)脏款、方法、結(jié)構(gòu)體和變量等的使用直接寫(xiě)函數(shù)裤园、方法撤师、結(jié)構(gòu)體、變量等的名稱(chēng)拧揽。

  1. 只導(dǎo)入不使用
package main

import _ "fmt"

func main() {
}

上文提到剃盾,golang 中導(dǎo)入的包需要使用。否則會(huì)報(bào)錯(cuò)淤袜。上文的例子痒谴,使用_ 表示只導(dǎo)入,而不使用铡羡。通常用于只是執(zhí)行那個(gè)需要導(dǎo)入包的 init 函數(shù)积蔚。

梳理下:

import name "fmt"  # name.Println  別名方式
import _ "fmt" # 只初始化目標(biāo)包
import . "fmt" # 省略包名
import "fmt" # fmt.Println 原始包名+方法(函數(shù))

雖然存在幾種方式。但是推薦使用默認(rèn)方式:即原始包全路徑的方式蓖墅。其他方式库倘,使用到的時(shí)候能更好的組織你的代碼,那就用论矾。否則不建議使用教翩。

3. 包下載

  • 使用 go 自帶的 命令行工具
go get -u -v *****

go get 后面接的參數(shù)即是:github 或者其他托管網(wǎng)站的代碼路徑。

鑒于國(guó)內(nèi)訪(fǎng)問(wèn) github 或者其他網(wǎng)站存在網(wǎng)絡(luò)訪(fǎng)問(wèn)慢的情況贪壳。推薦下面的方式饱亿。

  • gopm

當(dāng)然gopm 這個(gè)也屬于一個(gè) go 第三方庫(kù),也需要使用第一種方式下載下

go get -u github.com/gpmgo/gopm

然后下載完成之后,使用 gopm 下載第三方庫(kù)

gopm get ****

后面接項(xiàng)目路徑彪笼。用法和go get 幾乎一致钻注。

下載的第三方庫(kù)的默認(rèn)路徑是:GOPATH/src 路徑

4. 包管理

通過(guò)上文,我們已經(jīng)知道如何導(dǎo)入包配猫、導(dǎo)入包的幾種方式幅恋、第三方包的下載、下載包的存放路徑等泵肄。

那自己創(chuàng)建的項(xiàng)目中如何管理第三方包呢? 即:將用到的第三方包移至個(gè)人項(xiàng)目工程下捆交。

govendor 。

雖然存在多種包的管理方式腐巢。但我覺(jué)得現(xiàn)在的這種方式挺友好的品追。

  • 下載
go get -u github.com/kardianos/govendor
  • govendor init

這一步觸發(fā)的動(dòng)作是創(chuàng)建:vendor 目錄 和 vendor.json 文件

  • govendor add +external

這一步觸發(fā)的動(dòng)作是:將自己項(xiàng)目中使用到的第三方庫(kù),復(fù)制到vendor 目錄下冯丙,并維護(hù)vendor.json文件

總結(jié):通過(guò)本節(jié)肉瓦,你會(huì)知道

  • go 的工作空間的文件系統(tǒng)組成
  • go 中包的導(dǎo)入方式
  • go 中第三方包的管理

下節(jié)我們寫(xiě)代碼,看代碼胃惜,分析代碼泞莉。

希望對(duì)你有所啟發(fā)。

再會(huì)蛹疯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末戒财,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捺弦,更是在濱河造成了極大的恐慌,老刑警劉巖孝扛,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件列吼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苦始,警方通過(guò)查閱死者的電腦和手機(jī)寞钥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)陌选,“玉大人理郑,你說(shuō)我怎么就攤上這事∽捎停” “怎么了您炉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)役电。 經(jīng)常有香客問(wèn)我赚爵,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任冀膝,我火速辦了婚禮唁奢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窝剖。我一直安慰自己麻掸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布赐纱。 她就那樣靜靜地躺著论笔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪千所。 梳的紋絲不亂的頭發(fā)上狂魔,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音淫痰,去河邊找鬼最楷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛待错,可吹牛的內(nèi)容都是我干的籽孙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼火俄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼犯建!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瓜客,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤适瓦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后谱仪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玻熙,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年疯攒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗦随。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敬尺,死狀恐怖枚尼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砂吞,我是刑警寧澤署恍,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站呜舒,受9級(jí)特大地震影響锭汛,放射性物質(zhì)發(fā)生泄漏笨奠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一唤殴、第九天 我趴在偏房一處隱蔽的房頂上張望般婆。 院中可真熱鬧,春花似錦朵逝、人聲如沸蔚袍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啤咽。三九已至,卻和暖如春渠脉,著一層夾襖步出監(jiān)牢的瞬間宇整,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工芋膘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳞青,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓为朋,卻偏偏與公主長(zhǎng)得像臂拓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子习寸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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