只需要指定目標操作系統(tǒng)的平臺和處理器架構即可:
創(chuàng)新互聯(lián)-專業(yè)網站定制、快速模板網站建設、高性價比坡頭網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式坡頭網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋坡頭地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
因為不支持CGO,所以要禁用CGO
然后再執(zhí)行go build命令,得到的就是能夠在Linux平臺運行的可執(zhí)行文件了。
Mac 下編譯 Linux 和 Windows 平臺 64位 可執(zhí)行程序:
Linux下編譯 Mac 和 Windows 平臺64位可執(zhí)行程序:
Windows下編譯Mac平臺64位可執(zhí)行程序:
整個過程看起來非常簡單,運行起來也非常簡單,調用make release命令,并給VERSION變量賦值不同的版本號即可:
命令會編譯出不同平臺可運行的壓縮包:
對比于其他語言的程序,Go語言的跨平臺能力是真的強,拿.Net和JAVA來說吧,.Net在.Net core出現之前是不能跨平臺的,只能在windows上編譯運行,即使是.net core出現以后,跨平臺的程序也是相當的麻煩。而java雖然一直都可以跨平臺,但是運行JAVA程序的機器上也必須要有JAVA程序運行環(huán)境JRE。而相對于Go程序,跨平臺就簡單的多了,只需要在編譯指定目標程序運行的架構和環(huán)境即可編譯出指定操作系統(tǒng)和架構的程序。
以上是指定了go的環(huán)境變量后執(zhí)行的go build命令進行目標程序的構建,這種方式會一直生效的,如果不讓他一直生效,可以在構建的時候臨時指定環(huán)境變量,下面以window的環(huán)境為例,來介紹臨時指定環(huán)境變量的方式構建可以在Linux環(huán)境下運行的可執(zhí)行程序:
可以根據不同的架構和操作系統(tǒng)將其編寫為不同的.bat的可執(zhí)行文件放置在程序的根目錄,Linux的和MAC的也一樣編寫成腳本文件放置在程序的根目錄,這樣在構建的時候就不用再敲命令了,直接運行腳本就可以了。
Java程序編譯打包后為war包或者是java包,必須執(zhí)行java -jar 命令或者將其放置到tomcat的指定目錄下,運行tomcat程序。而Go語言編寫的程序最終為可執(zhí)行的文件(window下編譯出的是.exe的可執(zhí)行文件),只需要將其賦予可執(zhí)行的權限就可以直接運行了。
構建JAVA程序的鏡像需要指定java的基礎鏡像,否則就需要在鏡像中安裝java的運行環(huán)境了,下面展示的是構建的一個JAVA程序的鏡像,構建出來鏡像的體積相對比較大
而Go程序制作出的鏡像就不需要安裝任何的依賴環(huán)境,因為他在打包的時候就已經將依賴的包一塊打包到一起了
拿著這個鏡像就可以到處運行了。
通過對比我們可以發(fā)現,如果沒有之前的技術和業(yè)務的積累,重新開發(fā)一個新的項目,使用go去開發(fā)無疑是最容易上手的,所以現在很多公司都使用go進行開發(fā),也逐漸將其他語言的項目逐步的用go語言進行改造。其實用什么語言不重要,合適的才重要,開發(fā)項目在選擇語言的時候也會綜合多方面來考慮選擇合適的語言和架構,畢竟很多公司都不是搞研究的,都需要項目來賺錢,所以開發(fā)的速度、客戶的滿意度、項目交付的時間才是驅動公司技術的主要因素。
我們個人也應該不斷完善自己的技術棧,不應該太依靠某種語言,最重要的還是自己的架構思想和底層架構知識,只有掌握了這些才能夠不被 社會 和公司“優(yōu)化”。
GO語言的優(yōu)勢:可直接編譯成機器碼,不依賴其他庫,glibc的版本有一定要求,部署就是扔一個文件上去就完成了。靜態(tài)類型語言,但是有動態(tài)語言的感覺,靜態(tài)類型的語言就是可以在編譯的時候檢查出來隱藏的大多數問題,動態(tài)語言的感覺就是有很多的包可以使用,寫起來的效率很高。語言層面支持并發(fā),這個就是Go最大的特色,天生的支持并發(fā),我曾經說過一句話,天生的基因和整容是有區(qū)別的,大家一樣美麗,但是你喜歡整容的還是天生基因的美麗呢?Go就是基因里面支持的并發(fā),可以充分的利用多核,很容易的使用并發(fā)。內置runtime,支持垃圾回收,這屬于動態(tài)語言的特性之一吧,雖然目前來說GC不算完美,但是足以應付我們所能遇到的大多數情況,特別是Go1.1之后的GC。簡單易學,Go語言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go關鍵字是25個,但是表達能力很強大,幾乎支持大多數你在其他語言見過的特性:繼承、重載、對象等。豐富的標準庫,Go目前已經內置了大量的庫,特別是網絡庫非常強大,我最愛的也是這部分。內置強大的工具,Go語言里面內置了很多工具鏈,最好的應該是gofmt工具,自動化格式化代碼,能夠讓團隊review變得如此的簡單,代碼格式一模一樣,想不一樣都很困難??缙脚_編譯,如果你寫的Go代碼不包含cgo,那么就可以做到window系統(tǒng)編譯linux的應用,如何做到的呢?Go引用了plan9的代碼,這就是不依賴系統(tǒng)的信息。Go語言這么多的優(yōu)勢,你還不想學嗎?我記得當時我看的是黑馬程序員的視頻,我對他們視頻的印象就是通俗易懂,就是好!