本文目錄一覽:
- 1、sublime text 3 怎麼編譯golang
- 2、怎麼編譯golang寫的程序為系統服務
- 3、Golang 的靜態編譯
- 4、mac下打patch後編譯安裝golang
- 5、golang項目中使用條件編譯
sublime text 3 怎麼編譯golang
1.安裝git
因為golang是通過git來管理遠程包的,所以我們首先要安裝git
git安裝比較簡單,直接下一步即可(在Windows Explorer integration選項中將「Git Bash here」和「Git GUI here」打對勾),需要了解具體安裝的可以看這裡。
2.安裝Golang
1) 首先到選擇適合你系統的安裝包
2)我這裡選擇的是:go1.4.2.windows-amd64.msi,下載完成安裝到指定目錄即可。我這裡是(E:\Go)。
3)安裝完成後環境變數已經自動設置好了,可以呼出cmd命令行輸入命令查看
go env
可以看到,已經出現go命令了。如果你的不能出現,那可能是環境變數設置的問題。
進入我的電腦-高級設置-環境變數查看下,GOROOT變數是否存在,以及Path變數中是否也設置了GOROOT。沒有的話,新增一個GOROOT變數,路徑則輸入你剛剛安裝完成後Go的根目錄,如我的是:E:\Go\。然後編輯Path變數,在最後面新增”;%GOROOT%bin”。
4)go命令依賴一個環境變數:GOPATH,這不是Go的安裝目錄,而是你的工作(工程)目錄(你的代碼都會在該目錄下)。GOPATH可以有多個,windows以分號(;)進行區分,Linux系統是冒號(:),當有多個GOPATH時,默認會將go get的內容放在第一個目錄下。這裡我們新建一個GOPATH變數,以我的為例:F:\mygo。
3.安裝Sublime Text3
注意:sublime是收費軟體,不註冊也可以正常使用,只是保存次數達到一定的數量的時候會提示購買;忽略後可以正常使用。
這裡需要安裝一個sublime的pakcage control功能,用於接下來安裝sublime插件。
1)在打開軟體後,按下快捷鍵 Ctrl+`,(`這個符號為英文半形模式下,按下 Tab 鍵上方、數字鍵1左邊的那個按鍵),此時會打開一個命令窗口,複製並輸入以下內容,最後回車:
import urllib.request,os,hashlib; h = ‘eb2297e1a458f27d836c04bb0cbaf282’ + ‘d0e7a3098092775ccb37ca9d6b2e4b7d’; pf = ‘Package Control.sublime-package’; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( ” + pf.replace(‘ ‘, ‘%20’)).read(); dh = hashlib.sha256(by).hexdigest(); print(‘Error validating download (got %s instead of %s), please try manual install’ % (dh, h)) if dh != h else open(os.path.join( ipp, pf), ‘wb’ ).write(by)
2)重啟sublime之後,你就可以發現在 Preferences 這個菜單下出現了菜單項 Package Control,如圖:
4. 安裝GoSublime插件
1)在sublime中,按住快捷鍵 shift + ctrl + p,在彈出框中輸入install package,如圖:
2)回車,會出現如下圖(可能需要稍微等待下,可以看sublime最下面的狀態):
3)輸入gosublime,回車(可能需要稍微等待下,可以看sublime最下面的狀態),如圖:
4)gosublime安裝完成後,Preferences – package settings – GoSublime – Settings – Uesrs需要配置下GOPATH,GOROOT,如圖:
5)在打開的窗口中輸入以下內容,路徑請自行替換,ctrl+s保存。
{
“env”: {
“GOPATH”: “F:/mygo”,
“GOROOT”: “E:/Go”
}
}
6)重啟sublime,在GOPATH中的src新建一個hello.go文件,可以看到代碼自動補全已經出來了,:)
至此,sublime text3 + golang 安裝完成。
怎麼編譯golang寫的程序為系統服務
設置GOPATH,這個環境變數指向你的projectDir(工程目錄),形如:GOPATH=/home/user/ext:/home/user/projectDir (可以設置多個工程目錄,linux下用冒號分隔,windows下用分號分隔)
創建工程文件夾projectDir
在projectDir下創建src目錄
在src下創建區分包的文件夾myDir
在myDir下創建包pkgDir
在pkgDir下創建package source源代碼文件,這些文件的package都是pkgDir
Golang 的靜態編譯
Go 語言和 C 語言的一個很大的區別是, Go 語言只靜態編譯,做個測試:
一方面是 Go 語言編譯後的可執行文件大小比 C 語言的大很多,
另一方面是 C 語言的可執行文件需要依賴 glibc 動態庫,
用 ldd 命令可以看出來:
或者直接刪除 glibc 動態庫, C 可執行程序報錯,而 Go 的還能運行:
這時候只有內部命令可以運行,外部命令,包括 ln 甚至最常用的 ls 命令也不能運行了:
設置好 LD_PRELOAD 環境變數之後, ln 命令可以運行,但是 sudo 仍然不能運行
只能靠 root 用戶來重新創建軟連接了:
所以用 sudo 來 rm 文件要小心,還是用 root 比較好。如果沒有預先留一個打開的 root 終端,登錄都登不進去。
mac下打patch後編譯安裝golang
因為業務上的需求,架構師改了hack了一下golang的源碼,放出一個patch文件,給源碼打了patch之後,需要重新編譯go源碼,
我是用 brew 安裝的golang, 先用 go env 看看
鎖定了源碼的路徑: /usr/local/Cellar/go/1.7.5/libexec
Go從1.5版本開始實現「自舉」(Bootstrap),也就是用Go來實現Go、用Go來編譯Go,因此這裡的意思是系統默認用go1.4來編譯golang,
但是我的系統裡面並沒有go1.4,這裡偷個懶
等待編譯測試完成即可。
golang項目中使用條件編譯
golang中沒有類似C語言中條件編譯的寫法,比如在C代碼中可以使用如下語法做一些條件編譯,結合宏定義來使用可以實現諸如按需編譯release和debug版本代碼的需求
build tags 是通過代碼注釋的形式實現的,要寫在文件的最頂端;
go build指令在編譯項目的時候會檢查每一個文件的build tags,用來決定是編譯還是跳過該文件
build tags遵循以下規則
示例:
約束此文件只能在支持kqueue的BSD系統上編譯
一個文件可能包含多行條件編譯註釋,比如:
約束該文件在linux/386 或 darwin/386平台編譯
需要注意的點
正確的寫法如下:
編譯方法:
具有_$GOOS.go後綴的go文件在編譯的時候會根據當前平台來判斷是否將該文件導入並編譯;同樣適用於處理器架構判斷 _$GOARCH.go。
兩者可以結合起來使用,形式為: _$GOOS_$GOARCH.go
示例:
文件名必須提供,如果只由後綴的文件名會被編譯器忽略,比如:
這兩個文件會被編譯器忽略,因為以下劃線開頭的文件都會被忽略
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/187818.html