go build 參數_Go語言 通過go bulid -tags 實現編譯控制

e215ea4d06bc4cb207453d05de508e4b.png

Go語言提供的build tag 條件編譯特性,顧名思義,只有在特定條件下才會構建對應的代碼。

比如下面的源文件只有在設置debug構建標志時才會被構建:

// +build debugpackage mainvar buildMode = "debug"

可以用以下命令構建:

go build -tags="debug"
go build -tags="windows debug"

關于tags的說明:

  • 構建約束以一行+build開始的注釋。在+build之后列出了一些條件,在這些條件成立時,該文件應包含在編譯的包中;
  • 約束可以出現在任何源文件中,不限于go文件;
  • +build必須出現在package語句之前,+build注釋之后應要有一個空行。
  • 多個條件之間,空格表示OR;逗號表示AND;嘆號(!)表示NOT
  • 一個文件可以有多個+build,它們之間的關系是AND。

例如:

我們可以通過-tags命令行參數同時指定多個build標志,它們之間用空格分隔。

當有多個build tag時,我們將多個標志通過邏輯操作的規則來組合使用。比如以下的構建標志表示只有在”linux/386“或”darwin平臺下非cgo環境“才進行構建。

// +build linux,386 darwin,!cgo
// +build windows

其中linux,386中linux和386用逗號連接表示AND的意思;

linux,386darwin,!cgo之間通過空白分割來表示OR的意思;

兩行語句表示AND。

tags 應用場景:

不同環境下編譯不同的文件,實現版本控制 、 環境配置控制等。

例如:項目中有如下文件代表不同的運行環境,通過 tag 控制不同環境下要編譯的文件

dev.go

// +build devpackage mainimport "fmt"var version = "dev"func main() {fmt.Printf("running %s version", version)
}

release.go

// +build releasepackage mainimport "fmt"var version = "release"func main() {fmt.Printf("running %s version", version)
}

編譯時通過指定不同的標簽來編譯不同文件:

編譯 dev 環境

go build -tags="dev" 

編譯 release 環境

go build -tags="release"

來思Go,Let's Go!歡迎留言交流學習!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259035.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259035.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259035.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

selinux 的管理

第十單元selinux 的管理一 顯示及更改 SELINUX 模式getenforce ###顯示selinux模式setenforce 0|1 ##0指permissive警告,1 表示 enforcing強制###vim /etc/sysconfig/selinux ###修改selinux開機狀態###注:disable表示關閉&…

ubuntu15.10下安裝opencv2.4.9python上調用opencv庫

對于centos,可以參考:Install OpenCV-Python in Fedora 如果IPP難以下載可以在cmake時禁掉它,只需:cmake -DWITH_IPPOFF OpenCV3.3CUDA9.0 安裝過程中遇到的問題,解析: https://blog.csdn.net/u014613745/a…

【轉】jquery 注冊事件的方法

原文鏈接:http://outofmemory.cn/code-snippet/2123/jquery-zhuce-event-method 1.使用事件名來綁定,可用的事件名有 change,click,dblclick,error,focus,focusin,focusout,keydown,keypress,keyup,mousedown,mouseenter,mouseleave,mousemove,mouseout,…

ffmpeg 時間戳

轉http://blog.csdn.net/yfh1985sdq/article/details/5721953 AVpacket里的時間戳pts和dts.單位好像是us. 問 : 時間戳pts和dts,這里兩個時間戳各有什么意義? 答 : 顯示時間,解碼時間. DTS:decoding time stamp PTS:presentation time stamp Generally …

鍵盤改鍵軟件_一秒五鍵,一鍵三招,萬種光污染,杜伽K310櫻桃軸機械鍵盤感受...

機械鍵盤我一直用的青軸,或者各種其他名字但其實本質就是青軸的。喜歡青軸那種清脆的聲音,在我聽來如同山間小溪流水般的叮咚。不過這聲音在夜間分外的具有穿透力,更會在人身體不好的時候難以承受,所以每每用過之后卻又不得不換回…

ubuntu 15.10下cmake 的安裝

因為原先ubuntu自帶的cmake有點舊,就想著安裝個最新的,可是直接安裝卡在了某一步上,后面有說明。現將正確的安裝方法列出來。1.卸載原有的版本sudo apt-get autoremove cmake2. 下載最新的cmake :https://cmake.org/download/3. 解壓&#xf…

codeigniter鉤子的使用

CodeIgniter 的鉤子功能,使得我們可以在不修改系統核心文件的基礎上,來改變或增加系統的核心運行功能。可是鉤子究竟該怎么用呢?雖然不是很難,不過很多剛用ci的朋友可能還是不明白怎么用。 通過本文的簡單實例,大家一下…

wxWidgets之wxGrid控件

1. 介紹wxGrid控件時wxWidgets界面庫中內置的網格控件。通經常使用來顯示表格數據。該控件擁有強大的功能。開發人員可依據自己的需求對其進行定制。 2. 經常使用API 構造函數:wxGrid ()wxGrid (wxWindow *parent, wxWindowID id, const wxPoint &poswxDef…

powerdesigner畫關系圖_想畫好手繪,這些圖你一定要畫一下!

畫好手繪除了對透視要深入了解掌握以及線條運用把握之外,還有很重要的就是要對空間物體的關系、比例、光影關系都要理解透徹。大體快可分割成多個x小體塊。其實當年學習的繪畫基礎也是畫好手繪的基礎,畫手繪依然需要去理解整體畫面的空間黑白灰、物體穿插…

C#,pdf文件轉換成圖片文件。

本文采用Adobe Acrobat9.0的COM組件,將Pdf文件的每一頁轉換成對應的圖片文件。 開發環境:VS2010,.Net Framework4.0,Adobe Acrobat9.0。 工程中添加COM引用:Adobe Acrobat 9.0 Type Library(必須裝了Adobe …

Android進程間通信

一.Linux系統進程間通信有哪些方式? 1.socket; 2.name pipe命名管道; 3.message queue消息隊列; 4.singal信號量; 5.share memory共享內存; 二.Java系統的通信方式是什么? 1.socket; 2.name pip…

最新的一些開源face alignment及評價

dlib :https://github.com/davisking/dlib/tree/v18.18 評價:速度快,可商用,有些時候不太準確 2. CLM-framework: https://github.com/TadasBaltrusaitis/CLM-framework 評價:很準確,不可商用 3. Face Detection…

1048 石子歸并

1048 石子歸并 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 黃金 Gold 題目描述 Description有n堆石子排成一列,每堆石子有一個重量w[i], 每次合并可以合并相鄰的兩堆石子,一次合并的代價為兩堆石子的重量和w[i]w[i1]。問安排怎樣的合并順序&#xf…

internetreadfile讀取數據長度為0_【完結】TensorFlow2.0 快速上手手冊

大家好,這是專欄《TensorFlow2.0》的第五篇文章,我們對專欄《TensorFlow2.0》進行一個總結。我們知道全新的TensorFlow2.0 Alpha已經于2019年3月被發布,新版本對TensorFLow的使用方式進行了重大改進,為了滿足各位AI人對TensorFlow…

Facial Landmark Detection(人臉特征點檢測)

原文地址:http://www.learnopencv.com/facial-landmark-detection/#comment-2471797375 作為計算機視覺研究員,我們很早就開始研究人臉。人臉分析領域最廣為人知的就是人臉識別(face recognition).但是為了識別一幅圖像中的人臉&…

cpu卡操作協議iso14443協議

http://baike.baidu.com/link?url3mef2ZMRoNuBrVLA2HpEh8xrBtzACdIi5nIDUsMyVkA8OulIXGWgswvFcTiBfh_B轉載于:https://www.cnblogs.com/shuenjian901/p/3496331.html

Python 字符串的內置函數

方法描述string.capitalize()把字符串的第一個字符大寫string.center(width)返回一個原字符串居中,并使用空格填充至長度 width 的新字符串string.count(str, beg0, endlen(string))返回 str 在 string 里面出現的次數,如果 beg 或者 end 指定則返回指定范圍內 str …

Java中的Error和Exceptiond的異同點

Error和Exception的異同點: (1)Error類和Exception類都繼承超類Java.lang.Throwable (2)Error:一般指與虛擬機相關的問題,如系統崩潰,內存溢出等。對于這類錯誤,僅靠程序…

python算法題_python基本算法題(一)

1、3位水仙花數計算 "3位水仙花數”是指一個三位整數,其各位數字的3次方和等于該數本身。 例如: ABC是一個“3位水仙花數”,則:A的3次方+B的3次方+C的3次方 ABC。 使用Python,輸出所有的3…

虛擬機環境下安裝ESX不能安裝虛擬系統解決方案

在虛擬機環境(ESX、workstation等)下安裝ESX或workstation等虛擬機,在虛擬機上再安裝操作系統,會提示“虛擬系統不能啟動,直到你配置了外部虛擬機(vmware esx in a virtual machine requires the outer vir…