go使用之-编译约束
生活随笔
收集整理的這篇文章主要介紹了
go使用之-编译约束
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、背景
今天無意中看到一套代碼,關于獲取系統實時運行狀況的開源庫,里面沒有任何關于系統選擇,但是一個包下面,以不同系統名字結尾,例如*_linux.go,*_darwin.go結尾,而且文件內的方法又是同名,眾所周知,go的同一包下面,如果方法同名是會報錯的,于是乎特別好奇, why?
2、解決疑惑-構建約束
帶著疑惑,我去網上搜了一下,了解到了一個新的名詞 : build constraints(構建約束),其實這個在c++里面還是經常會看到,但是作為一個go開發者,現在才知道??♀ 。?看官方解釋:
里面清除描述了,編譯便簽(build tags 勉強翻譯哈),可以讓你在構建的時候自動選擇那些文件編譯,那些文件不編譯,并且不止作用于go文件,如果要用,就必須出現在在文件開頭,而且之后還要有空行。
3、如今了解了有這個東西,那這個build targs 到底有哪些呢,怎么用呢?
也去網上搜了下這些tags: + (編譯)、 !(忽略)...
樣子長下面這樣
當然還有其他的些約束,例如指定go版本等等,使用時再做細細研究吧!
4、解決了什么問題?
這個主要解決了代碼解耦問題,例如我們寫的采集器,會針對不同的系統都有要一套采集代碼,返回結果是一樣的。如果采用這中方式,只需針對不同的系統要增加文件即可。完美解決了以前都是先判斷系統,然后switch的方式。
轉載于:https://juejin.im/post/5d05b724f265da1b6f43735a
總結
以上是生活随笔為你收集整理的go使用之-编译约束的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery dataTables 的使
- 下一篇: 每日一个css效果之css sprite