2016-11-28 65 views

回答

5

Go的好處之一就是一切都在,Go :-)包括幾乎所有的標準庫和工具。

cmd/go/vcs.go我們可以看到這是如何完成的,並且在cmd/go/alldocs.go中有記錄。

詳細的,請看repoRootForImportPath

// repoRootForImportPath analyzes importPath to determine the 
// version control system, and code repository to use. 
func repoRootForImportPath(importPath string, security securityMode) (*repoRoot, error) { 

這樣做是:

  1. vcsPaths舉辦的 「已知主機」 的靜態列表。對於一些(例如GitHub),這很容易,我們可以設置VCS。對於其他人(例如BitBucket),使用回調函數檢查URL以查看可以使用哪些回購。

  2. 如果失敗,它會嘗試查看路徑中的「VCS擴展名」,例如example.com/foo.gitexample.com/foo.git/dir

  3. 最後go get將尋找一個go-import meta標籤,它看起來像:

    <meta name="go-import" content="example.com/path git https://github.com/Example/repo.git"> 
    

    另見parseMetaGoImports()Vanity Imports with Hugo是一個很好的介紹如何使用它。

沒有真正的「自動檢測」機制。所以如果你回購生活在​​那麼go get example.com/stuff不是工作。您需要需要的擴展或元標記。

添加了go-get=1參數,以便網站製作者很容易看到這是來自go get的請求,這在某些情況下可能會有用。

+0

感謝您指出實施位置。作爲一個真實的例子,'https:// golang.org/x/net/html'中的HTML頁面包含'go-import'元標記。 – smwikipedia