現(xiàn)代應(yīng)用支持多平臺(tái)運(yùn)行是一件稀松平常的事情,在 Go 語(yǔ)言里面,為了支持應(yīng)用的多平臺(tái)部署,給用戶(hù)提供了方便的配置方式來(lái)輕松構(gòu)建針對(duì)不同操作系統(tǒng)和平臺(tái)的運(yùn)行文件。

烏魯木齊網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,烏魯木齊網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為烏魯木齊上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的烏魯木齊做網(wǎng)站的公司定做!
Go 的構(gòu)建約束,即構(gòu)建標(biāo)簽,是以 // go:build 為開(kāi)始的行注釋?zhuān)绻?1.16 或之前的版本,格式是 // +build 。跟此變更相關(guān)的 issue 可以參考 25348 。
構(gòu)建標(biāo)簽必須出現(xiàn)在 package 子句之前。為了區(qū)分構(gòu)建標(biāo)簽和包文檔的描述注釋?zhuān)瑯?gòu)建標(biāo)簽后面應(yīng)該有一個(gè)空行。
構(gòu)建標(biāo)簽由||, , !運(yùn)算符以及括號(hào)來(lái)組合表達(dá)。運(yùn)算符與 Go 中的含義相同。
例如,以下構(gòu)建標(biāo)簽在滿(mǎn)足 linux 和 386 約束,或者滿(mǎn)足 darwin 而 cgo 不滿(mǎn)足時(shí)構(gòu)建文件:
//go:build (linux 386) || (darwin !cgo)
又如:僅在使用 cgo 時(shí),且僅在 Linux 和 OS X 上構(gòu)建文件: //go:build cgo (linux || darwin)
注意:1.17 及以后的表達(dá)格式里,一個(gè)文件有多個(gè) //go:build 行是錯(cuò)誤的。
在 1.16 及以前的版本,多行構(gòu)建標(biāo)簽是允許的,并且組合方式是通過(guò)空格和逗號(hào)等來(lái)區(qū)分,空格符表示 OR,逗號(hào)表示 AND,感嘆號(hào)表示 NOT。而多行之間則表示 OR。gofmt 命令將在遇到舊語(yǔ)法時(shí)添加等效的 //go:build 約束。如下是示例:
如果文件名在去除擴(kuò)展名和可能的 _test 后綴后匹配以下任何模式, (例如:source_windows_amd64.go)其中 GOOS 和 GOARCH 分別代表任何已知的操作系統(tǒng)和體系結(jié)構(gòu)值,那么認(rèn)為該文件除了文件中的任何顯式約束之外,具有這些術(shù)語(yǔ)的所表達(dá)的隱式構(gòu)建標(biāo)簽。
除了官方提供的針對(duì)不同平臺(tái)的內(nèi)置標(biāo)簽,用戶(hù)也可以使用自定義標(biāo)簽,例如 //go:build prod , 只需要在執(zhí)行 go build 時(shí)顯式帶上標(biāo)簽名 go build --tags=prod 。
想要使文件構(gòu)建時(shí)被忽略,可以使用: //go:build ignore ,其他任何沒(méi)有被用來(lái)定義為標(biāo)簽的詞也可以,但"ignore"是約定俗成的。)。Go 語(yǔ)言目前支持的系統(tǒng)和架構(gòu)可以參考 官方文檔 。
Go 語(yǔ)言和 C 語(yǔ)言的一個(gè)很大的區(qū)別是, Go 語(yǔ)言只靜態(tài)編譯,做個(gè)測(cè)試:
一方面是 Go 語(yǔ)言編譯后的可執(zhí)行文件大小比 C 語(yǔ)言的大很多,
另一方面是 C 語(yǔ)言的可執(zhí)行文件需要依賴(lài) glibc 動(dòng)態(tài)庫(kù),
用 ldd 命令可以看出來(lái):
或者直接刪除 glibc 動(dòng)態(tài)庫(kù), C 可執(zhí)行程序報(bào)錯(cuò),而 Go 的還能運(yùn)行:
這時(shí)候只有內(nèi)部命令可以運(yùn)行,外部命令,包括 ln 甚至最常用的 ls 命令也不能運(yùn)行了:
設(shè)置好 LD_PRELOAD 環(huán)境變量之后, ln 命令可以運(yùn)行,但是 sudo 仍然不能運(yùn)行
只能靠 root 用戶(hù)來(lái)重新創(chuàng)建軟連接了:
所以用 sudo 來(lái) rm 文件要小心,還是用 root 比較好。如果沒(méi)有預(yù)先留一個(gè)打開(kāi)的 root 終端,登錄都登不進(jìn)去。
可能是編碼的問(wèn)題吧,go語(yǔ)言默認(rèn)用utf8編碼,而windows的命令行程序可能用的是gbk,
go及gomobile的環(huán)境配置這里就不介紹了,直接說(shuō)aar的生成和使用。
1. 設(shè)置環(huán)境變量GOPATH
GOPATH的值可以有多個(gè),用半角分號(hào)間隔,但不能以其結(jié)束,設(shè)置完成后需要重新做 gomobile init 。
2. 在GOPATH里創(chuàng)建src文件夾,用于存放go的包和源文件
3. 在src中創(chuàng)建hello文件夾(go文件的包名)
4. 在hello中創(chuàng)建hello.go文件,并輸入內(nèi)容
5. 編譯
執(zhí)行命令: gomobile bind -target=android hello
會(huì)生成一個(gè)hello.aar文件
6. 導(dǎo)入到android工程
將hello.aar文件放入工程的libs中,并配置build.gradle
在根結(jié)點(diǎn)加入:
在dependencies結(jié)點(diǎn)下加入依賴(lài):
7. 在Java中測(cè)試
運(yùn)行后,結(jié)果會(huì)輸出 Hello, Android and Gopher
Go語(yǔ)言是谷歌推出的一種全新的編程語(yǔ)言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說(shuō):我們之所以開(kāi)發(fā)Go,是因?yàn)檫^(guò)去10多年間軟件開(kāi)發(fā)的難度令人沮喪。
Go是谷歌2009發(fā)布的第二款編程語(yǔ)言。2009年7月份,谷歌曾發(fā)布了Simple語(yǔ)言,它是用來(lái)開(kāi)發(fā)Android應(yīng)用的一種BASIC語(yǔ)言.
Go Logo
北京時(shí)間2010年1月10日,Go語(yǔ)言摘得了TIOBE公布的2009年年度大獎(jiǎng)。該獎(jiǎng)項(xiàng)授予在2009年市場(chǎng)份額增長(zhǎng)最多的編程語(yǔ)言。
谷歌資深軟件工程師羅布·派克(Rob Pike)表示,"Go讓我體驗(yàn)到了從未有過(guò)的開(kāi)發(fā)效率。"派克表示,和今天的C++或C一樣,Go是一種系統(tǒng)語(yǔ)言。他解釋道,"使用它可以進(jìn)行快速開(kāi)發(fā),同時(shí)它還是一個(gè)真正的編譯語(yǔ)言,我們之所以現(xiàn)在將其開(kāi)源,原因是我們認(rèn)為它已經(jīng)非常有用和強(qiáng)大。"
2007年,谷歌把Go作為一個(gè)20%項(xiàng)目開(kāi)始研發(fā),即讓員工抽出本職工作之外時(shí)間的20%, 投入在該項(xiàng)目上。除了派克外,該項(xiàng)目的成員還有其他谷歌工程師也參與研發(fā)。
派克表示,編譯后Go代碼的運(yùn)行速度與C語(yǔ)言非常接近,而且編譯速度非常快,就像在使用一個(gè)交互式語(yǔ)言。現(xiàn)有編程語(yǔ)言均未專(zhuān)門(mén)對(duì)多核處理器進(jìn)行優(yōu)化。Go就是谷歌工程師為這類(lèi)程序編寫(xiě)的一種語(yǔ)言。它不是針對(duì)編程初學(xué)者設(shè)計(jì)的,但學(xué)習(xí)使用它也不是非常困難。Go支持面向?qū)ο螅揖哂姓嬲拈]包(closures)和反射 (reflection)等功能。
在學(xué)習(xí)曲線方面,派克認(rèn)為Go與Java類(lèi)似,對(duì)于Java開(kāi)發(fā)者來(lái)說(shuō),應(yīng)該能夠輕松學(xué)會(huì) Go。之所以將Go作為一個(gè)開(kāi)源項(xiàng)目發(fā)布,目的是讓開(kāi)源社區(qū)有機(jī)會(huì)創(chuàng)建更好的工具來(lái)使用該語(yǔ)言,例如 Eclipse IDE中的插件。
在谷歌公開(kāi)發(fā)布的所有網(wǎng)絡(luò)應(yīng)用中,均沒(méi)有使用Go,但是谷歌已經(jīng)使用該語(yǔ)言開(kāi)發(fā)了幾個(gè)內(nèi)部項(xiàng)目。派克表示,Go是否會(huì)對(duì)谷歌即將推出的Chrome OS產(chǎn)生影響,還言之尚早,不過(guò)Go的確可以和Native Client配合使用。他表示"Go可以讓?xiě)?yīng)用完美的運(yùn)行在瀏覽器內(nèi)。"例如,使用Go可以更高效的實(shí)現(xiàn)Wave,無(wú)論是在前端還是后臺(tái)。
Go 同時(shí)具有兩種編譯器,一種是建立在GCC基礎(chǔ)上的Gccgo,另外一種是分別針對(duì)64位x64和32位x86計(jì)算機(jī)的一套編譯器(6g和8g)。谷歌目前正在研發(fā)其對(duì)ARM芯片和Android設(shè)備的支持。派克表示,"Android手機(jī)存在的問(wèn)題是,我們一直沒(méi)有一個(gè)數(shù)學(xué)協(xié)處理器。"
請(qǐng)自行查看我前面寫(xiě)得GO語(yǔ)言開(kāi)發(fā)環(huán)境和GO語(yǔ)言IDE編輯器的經(jīng)驗(yàn)文章
我們先寫(xiě)一段GO代碼
很簡(jiǎn)單就是打印輸出一個(gè)hello world!
保存為print.go文件
然后再CMD下一路cd到print.go目錄下來(lái)
在cmd下運(yùn)行 go run print.go就可以運(yùn)行g(shù)o程序了
看看運(yùn)行結(jié)果
GO程序的代碼是可以直接編譯成exe文件的
在print.go目錄下運(yùn)行 go build print.go即可把go程序編譯成exe文件
完成之后看看exe文件是否存在
最好我們要看看運(yùn)行exe的效果
本文標(biāo)題:go語(yǔ)言編譯后 go語(yǔ)言編譯后的文件
本文網(wǎng)址:http://chinadenli.net/article46/hihshg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、外貿(mào)建站、品牌網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站建設(shè)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)