go使用之-編譯約束

一、背景

今天無心中看到一套代碼,關於獲取系統實時運行情況的開源,裏面沒有任何關於系統選擇,可是一個包下面,以不一樣系統名字結尾,例如*_linux.go,*_darwin.go結尾,並且文件內的方法又是同名,衆所周知,go的同一包下面,若是方法同名是會報錯的,因而乎特別好奇, why?linux

二、解決疑惑-構建約束

帶着疑惑,我去網上搜了一下,瞭解到了一個新的名詞 : build constraints(構建約束),其實這個在c++裏面仍是常常會看到,可是做爲一個go開發者,如今才知道🤦‍♀ 。️看官方解釋:c++

裏面清除描述了,編譯便籤(build tags 勉強翻譯哈),可讓你在構建的時候自動選擇那些文件編譯,那些文件不編譯,而且不止做用於go文件,若是要用,就必須出如今在文件開頭,並且以後還要有空行。git

三、現在瞭解了有這個東西,那這個build targs 到底有哪些呢,怎麼用呢?

也去網上搜了下這些tags: + (編譯)、 !(忽略)...github

樣子長下面這樣ui

固然還有其餘的些約束,例如指定go版本等等,使用時再作細細研究吧!翻譯

四、解決了什麼問題?

這個主要解決了代碼解耦問題,例如咱們寫的採集器,會針對不一樣的系統都有要一套採集代碼,返回結果是同樣的。若是採用這中方式,只需針對不一樣的系統要增長文件便可。完美解決了之前都是先判斷系統,而後switch的方式。code

相關文章
相關標籤/搜索