2014-07-14 29 views
1

Source fileGolang: 「包ast_test」 從Golang的STDLIB強調測試

文件的基本目錄:在文件指定ast

套餐:ast_test ??? ast

golang.org:在同一個目錄內的所有其他文件中指定

src contains Go source files organized into packages (one package per directory) ... By convention, packages are given lower case, single-word names; there should be no need for underscores or mixedCaps ... Another convention is that the package name is the base name of its source directory

怎麼可能有多個包(這裏是2 )在一個文件夾?

+1

什麼你的問題是什麼? –

+0

stackoverflow.com是不是一個golang bug跟蹤器 – 0xAX

+0

這個主題沒有問題,只是錯誤描述 – 0xAX

回答

2

你找到src/pkg/go/ast/commentmap_test.go另一個例子中,與註釋:

// To avoid a cyclic dependency with go/parser, this file is in a separate package. 

我想它允許像othogonal命令:

go test 

這將考驗解析器的功能,同時避免該測試成爲相同解析器功能的一部分(因爲它已被放入單獨的包中)

go command man page

聲明具有後綴「_test」的包的測試文件將被編譯爲單獨的包,然後與主測試二進制文件鏈接並運行。


This thread提出這樣的問題:

既然go工具需要每個目錄是一個包,不允許有相同的文件夾內有不同的包名稱的文件,包關鍵字如何有用?這似乎是不必要的重複。

編譯器是否需要它,或者是否有任何計劃將其刪除?

的答案暗示的事實,你可以文件夾中的多個軟件包:

包聲明聲明包的名稱。
Go語言不知道文件或目錄是什麼,導入路徑本身不影響正在導入的包的實際名稱。所以編譯器知道該調用哪個包的唯一方法是包聲明。

該語言不需要單獨的包在不同的目錄中;這是go工具的要求。
另一個假設的實現可能沒有這個要求。

即使這go工具要求可以繞過「// +build」構建標籤。

例如,讀misc/cgo/gmpmisc/cgo/stdio(一些文件包括// +build ignore

+0

如果Go不知道導入路徑,如果Go知道哪些包是導入路徑下導入,如果允許多個包? – xged

+0

@xged因爲'go build'會默認忽略測試類。因此他們的名字。 – VonC

+0

這很有道理。那麼我需要了解測試。你也可以在你的回答中加入golang.org的引用:「測試聲明後綴爲」_test「的包的文件將被編譯爲一個單獨的包,然後與主測試二進制文件鏈接並運行。」 – xged