Go項目的文件系統結構

資料夾結構

Go項目由以下人員組成套餐。我們稱之為命令具有main標識符。

一個項目可以有

  • 1包裹
  • n套餐
  • 1命令
  • 1命令和1包裹
  • n命令和1包裹
  • 1命令和n套餐
  • n命令和n套餐

根據項目的性質,您需要以某種方式組織文件夾結構。

現實世界中的一些例子

讓我們在下面看一些真實的例子。我把他們從建立Go項目的五個建議戴夫·切尼(Dave Cheney)撰寫。

具有以下項目的示例1包裹:

https://github.com/kr/fs

具有以下項目的示例n套餐

https://github.com/pkg/term

具有以下項目的示例1命令

https://github.com/tools/godep

具有以下項目的示例1命令和1包裹

https://github.com/monochromegane/the_platinum_searcher

具有以下項目的示例n命令和n套餐

https://github.com/golang/tools

項目內文件結構的約定

從這些示例中,我們可以得出以下約定:

如果您有一個命令,它可以存在於main.go文件放在項目的根目錄中。

使用多個命令,創建一個cmd/文件夾,然後在此文件夾下創建一個帶有命令名稱的文件夾。在每個文件夾中,理想情況下.go具有相同名稱的文件將包含main()功能,儘管不是強制性的。

程序包放在自己的文件夾中,除非您只有一個程序包。

已安裝軟件包的文件系統位置

可以使用以下命令安裝任何Go項目go getgo get將在以下位置安裝軟件包$GOPATH/src。例如輸入

go get github.com/kr/fs

將下載並安裝位於以下位置的1包存儲庫https://github.com/kr/fs,並將其置於$GOPATH/src/github.com/kr/fs。我們可以在程序中使用import github.com/kr/fs

如果我們鍵入怎麼辦

go get github.com/tools/godep

反而?請記住,這是我們之前列出的單命令存儲庫。

go get會像下載它一樣下載github.com/kr/fs,並將其放在$GOPATH/src,但由於它是命令,因此也會編譯並創建一個$GOPATH/bin/godep二進制的。

Go命令被編譯為所在文件夾的名稱,在這種情況下,該文件夾是根文件夾,因此它是godep。在使用多個命令的情況下,最後一個子文件夾姓名。例如理想github.com/flaviocopes/tools/cmd/unzip將被編譯為unzip。確實不是以包含main()功能。

工作空間

Go有一個非常獨特的概念工作區。工作空間是文件夾結構,$GOPATH指著。創建新的工作區時,請添加$GOPATH/bin文件夾以及您的路徑。例如,如果您要將工作空間設置為~/go(默認情況下是這樣):

export GOPATH=~/go
export PATH=~/go/bin:$PATH

現在,您運行的所有Go代碼都將引用此文件夾。儘管如上所述,這使您可以創建單獨的工作區在官方文檔中

Go程序員通常將所有Go代碼保存在一個工作區中。

請注意,這與其他編程環境不同,在其他編程環境中,每個項目都有一個單獨的工作區,並且這些工作區與版本控制存儲庫緊密相關。

這是一個工作區示例,在官方文檔中列出:

    bin/
        hello                          # command executable
        outyet                         # command executable
    pkg/
        linux_amd64/
            github.com/golang/example/
                stringutil.a           # package object
    src/
        github.com/golang/example/
            .git/                      # Git repository metadata
        hello/
            hello.go               # command source
        outyet/
            main.go                # command source
            main_test.go           # test source
        stringutil/
            reverse.go             # package source
            reverse_test.go        # test source
        golang.org/x/image/
            .git/                  # Git repository metadata
        bmp/
            reader.go              # package source
            writer.go              # package source
        #... (many more repositories and packages omitted) ...

知道了這一點,讓我們看看。

命令和軟件包的放置位置

使用以下命令運行命令時go run,您可以在任何喜歡的地方放置項目,但這是一種僅對快速測試有用的方法。

您應該在$GOPATH/src文件夾,帶有您唯一的名稱空間,例如

$GOPATH/src/github.com/flaviocopes/hello

運行時(從系統中的任何位置)

go install github.com/flaviocopes/hello

Go將編譯並放入hello二進制輸入$GOPATH/bin,可以從系統中的任何位置運行。

包裹也是如此除了在跑步時go install,它將編譯後的包放在$GOPATH/pkg

參考


更多教程: