golang安裝和部署


安裝golang

GOROOT 理論上只要定義這一個環境變量就可以玩了,go編譯的時候會首先在安裝目錄下尋找包
GOBIN 如果不定義的話,默認是$GOROOT/bin 如果想不切換目錄執行go的命令的話.需要將$GOBIN 加入到PATH目錄中.這個你懂的
GOPATH 一般是你的開發目錄,可以有多個.多個目錄的時候Windows是分號,Linux系統是冒號,當有多個GOPATH時,默認會將go get的內容放在第一個目錄下
$GOPATH 目錄約定有三個子目錄:

  • src 存放源代碼(比如:.go .c .h .s等)
  • pkg 編譯后生成的文件(比如:.a)
  • bin 編譯后生成的可執行文件(為了方便,可以把此目錄加入到 $PATH 變量中)

編譯

構建一個Go程序需要兩步:編譯和鏈接。
編譯和鏈 接過程都由工具go處理,它不僅可以構建本地程序和包,還能夠獲取、構建以及安裝第三方程序和包。

go build

go build 只編譯主程序(有main()函數的go文件).且如果不指定-o參數,會當前目錄下生成一個可執行文件。
go build -o myfirstgo        例如   hellogo.go 編譯成指定目標文件名myfirstgo  
go build 后面不帶文件名,我們將得到一個與目錄名同名的可執行文件  例如app/main.go    則得到app

如果有多個項目,即由多個main..則可指定項目,可在go build之后加上文件名,例如go build a.go

go get

go get 獲取遠程包的工具,目前go get支持多數開源社區(例如:github、googlecode、bitbucket、Launchpad)

例如 :go get github.com/astaxie/beedb go get -u 參數可以自動更新包,而且當go get的時候會自動獲取該包依賴的其他第三方包
go get本質上可以理解為首先第一步是通過源碼工具clone代碼到src下面,然后執行go install

要想go能夠編譯本地程序和包,有三個要求:

  • Go的bin目錄($GOROOT/bin或%GOROOT%\bin)必須在PATH環境變 量下
  • 必須存在一個目錄,該目錄下包含一個src目錄,本地程序和包的源碼就駐留在src目錄下
  • 包含src的那個目錄必須在GOPATH環境變量中設置

Go編譯器的package搜索順序是這樣的,以搜索hello這個package為例:

  • 首先,Go編譯器會在GO安裝目錄(GOROOT,這里是/usr/local/go)下查找是否有src/pkg/hello相關包源碼;如果沒有則繼續;
  • 若GOPATH=PATH1:PAHT2,則Go編譯器會依次查找是否存在PATH1/src/hello、PATH2/src/hello;配置在GOPATH中的PATH1和PATH2被稱作workplace;

go install

go install命令除了做了go build所做的事情之外,還將可執行文件放在標准位置($GOPATH/bin或%GOPATH%\bin)。
go install還可編譯其他非主程序的包放在pkg目錄下
這意味着將一個單一路徑($GOPATH /bin或%GOPATH>%\bin)加入到PATH環境變量中,我們安裝的所有Go程序就可以方便地被加入到PATH中。 install命令執行后,我們發現main目錄下沒有任何變化,原先build時產生的main可執行文件也不見了蹤影。
別急,前面說過Go install也有一套自己的約定:

  • go install編譯出的可執行文件文件名為其所在目錄名.所以可以把main目錄改成你想要的目錄名
  • go install將可執行文件安裝到與src同級別的bin目錄下,bin目錄由go install自動創建.如果主文件不在src/DIR 子目錄下.則不會生成到bin目錄下
  • go install將可執行文件依賴的各種package編譯后,放在與src同級別的pkg目錄下
.
|-- bin
|   `-- main.exe
|-- pkg
|   `-- windows_amd64
|       `-- hello.a
`-- src
    |-- hello
    |   `-- hello.go
    `-- main
        `-- main.go

1.go的入口程序,為package main下的main函數..和其所在的包名和文件名無關..即包名,和文件名可以自定義.

2.雖然包名可以自定義,但是盡量保持為main.因為golang不允許同一個目錄下有兩個不同包名的文件出現,如果app/main.go,app/test.go,test的package為app,則會發生下面的沖突

can't load package: package app: found packages main (main.go) and app (test.go) in /Volumes/Opt/workspace-go/src/app


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM