91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go36-1-命令行工具

發布時間:2020-05-06 07:32:57 來源:網絡 閱讀:1122 作者:騎士救兵 欄目:編程語言

源碼安裝工具 go install

源碼文件通常會被放在某個工作區的 src 子目錄下。
那么在安裝后如果產生了歸檔文件,就會放進該工作區的 pkg 子目錄;如果產生了可執行文件,就可能會放進該工作區的 bin 子目錄。

歸檔文件存放的位置

安裝某個代碼包而產生的歸檔文件是與這個代碼包同名的,擴展名是 .a。放置它的相對目錄就是代碼包的導入的父級文件夾的路徑。
執行命令:

go install github.com/labstack/echo

生成的歸檔文件的相對目錄就是 github.com/labstack , 文件名為 echo.a。
上面的相對路徑是在pkg目錄下的,并且中間還有一層目錄,目錄的名稱是操作系統有關的,叫做平臺相關目錄。目錄名稱是操作系統、下劃線和計算架構的代號組成。比如:linux_amd64、windows_amd64。
因此上面的代碼存放的相對路徑是:pkg/windows_amd64/github.com/labstack/echo.a
上述內容也可以去Go安裝的路徑下查看,比如我的Win10系統,把Go安裝在了D盤的根目錄下。于是在 D:\Go\pkg\windows_amd64 目錄下就可以看到所有標準庫的歸檔文件。

構建 go build 和安裝 go install

構建使用命令go build,安裝使用命令go install。構建和安裝代碼包的時候都會執行編譯、打包等操作,并且這些操作生成的任何文件都會先被保存到某個臨時的目錄中。
源碼文件分為三種,它們都有著不同的用途和編寫規則:

  • 命令源碼文件,聲明屬于main包并且包含一個main主函數(應該還是個無參數無返回值的函數),所以可以被直接執行
  • 庫源碼文件,不含主函數的包文件,不能被直接運行,它僅用于存放程序實體。
  • 測試源碼文件,名稱以_test.go結尾的源文件。不是下面要講的,略過。

構建 go build

如果構建的是庫源碼文件,那么操作的結果文件只會存在于臨時目錄中。這里的構建的主要意義在于檢查和驗證。
也就是構建了臨時目錄,然后就丟棄了。如果有問題就會報出來,如果沒問題就相當于一頓操作后什么都沒變化,就是上面說的加和驗證。
如果構建的是命令源碼文件,那么操作的結果文件會被搬運到那個源碼文件所在的目錄中。
一般構建就是用來做這個事情的。

安裝 go install

安裝操作會先執行構建,然后還會進行鏈接操作,并且把結果文件搬運到指定目錄。
如果安裝的是庫源碼文件,那么結果文件會被搬運到它所在工作區的 pkg 目錄下的某個子目錄中。
如果安裝的是命令源碼文件,那么結果文件會被搬運到它所在工作區的 bin 目錄中,或者環境變量GOBIN指向的目錄中。

小結

命令源碼文件,通過構建或安裝都可以完成編譯,只是生成的可執行文件的目錄不同。一般就用構建了,可以帶參數指定位置。
庫源碼文件,只有通過安裝才能在pkg中生成包文件。
一般就是構建源碼文件。庫文件的話就是進行安裝。

go build 命令

在運行go build命令的時候,默認不會編譯目標代碼包所依賴的那些代碼包,如果歸檔文件已經存在的話。如果被依賴的代碼包的歸檔文件不存在,或者源碼文件有了變化,那它還是會被編譯。常用參數說明:

  • -a : 可以強制編譯依賴的代碼包
  • -i : 不但要編譯依賴的代碼包,還要安裝它們的歸檔文件
  • -x : 查看go build命令具體執行了哪些操作
  • -n : 同上,只查看操作,但是不實際執行
  • -v : 可以看到go build命令編譯的代碼包的名稱。搭配-a參數使用時很有用

go get 命令

命令go get會自動下載代碼包,并把它們安裝到環境變量GOPATH包含的第1工作區的相應目錄中。如果存在環境變量GOBIN,那么僅包含命令源碼文件的代碼包會被安裝到GOBIN指向的那個目錄。常用參數說明:

  • -u : 下載并安裝代碼包,不論是否已存在
  • -d : 只下載代碼包,不安裝代碼包
  • -fix : 在下載代碼包后先運行一個用于根據當前Go語言版本修正代碼的工具,然后再安裝代碼包
  • -t : 同時下載測試所需的代碼包
  • -insecure : 允許通過非安全的網絡協議下載和安裝代碼包。比如:HTTP。

包的依賴管理

go get命令中并沒有提供依賴管理的功能。目前GitHub上有很多提供這類功能的第三方工具,比如glide、gb以及官方出品的dep、vgo等等,在它們的內部大都是直接使用go get實現的。

自定義代碼包遠程導入路徑

如果你想把你編寫的(被托管在不同的代碼托管網站上的)代碼包的遠程導入路徑統一起來,或者不希望讓你的代碼包中夾雜某個代碼托管網站的域名,那么你可以選擇自定義你的代碼包遠程導入路徑。這種自定義的實現手段叫做“導入注釋”。
比如代碼實際存儲的位置是:github.com/golang/sync/
但是安裝的時候實際使用的命令是:go get golang.org/x/sync。這里就隱藏了github.com的域名,以及后面的部分路徑golang。

導入注釋

導入注釋必須出現在源碼文件的代碼包聲明語句的右邊,是一條單行注釋。被雙引號包裹的是一個符合導入路徑語法規則的字符串。下面是 github.com/golang/sync 下 semaphore/semaphore.go 里的導入注釋:

package semaphore // import "golang.org/x/sync/semaphore"

這樣加入導入注釋后,就無法用github的地址來下載這個包了。但是也無法用自定義的路徑來下載這個包,應該自定義的路徑的網址還不能響應這個請求

編寫網站的處理請求

編寫一個可處理HTTP請求的程序。將對這個url響應的請求頭中加入如下的一行內容:

<meta name="go-import" content="golang.org/x/sync git https://github.com/golang/sync">

這行內容會被視為HTML文檔的元數據。這個就是go get命令的文檔中要求的寫法。它的模式是這樣的:

<meta name="go-import" content="import-prefix vcs repo-root">

content屬性中的import-prefix的位置上填入自定義的遠程代碼包導入路徑的前綴。而vsc代表與版本控制系統有關的標識,比如git。至于repo-root,它應該是與該處理程序關聯的路徑對應的Github網站的URL,即實際網址。

這么做的好處是,可以強化你的品牌,而不是某個代碼托管網站的。順便還可以隱藏掉用戶ID,也就是域名后的部分路徑。
最主要的是,使你的代碼包導入路徑整齊劃一,如果代碼包分散在不同的遠程路徑的話。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平定县| 西宁市| 巴青县| 永安市| 江口县| 乌什县| 白水县| 松桃| 安宁市| 乌拉特前旗| 安庆市| 永春县| 辽阳市| 隆德县| 德格县| 太湖县| 商南县| 铁力市| 神农架林区| 怀远县| 萨迦县| 定襄县| 忻城县| 秦皇岛市| 监利县| 囊谦县| 牙克石市| 丰顺县| 吴忠市| 黄平县| 文化| 来安县| 全南县| 邵武市| 涟水县| 岑溪市| 浮梁县| 临朐县| 翁源县| 乐清市| 红桥区|