一、背景介紹
業(yè)務(wù)包括:企業(yè)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、商城建設(shè)、網(wǎng)站營銷推廣等服務(wù),并且涵蓋域名申請(qǐng)、雅安服務(wù)器托管、云服務(wù)器、等互聯(lián)網(wǎng)基礎(chǔ)服務(wù);創(chuàng)新互聯(lián)建站聯(lián)建站以互聯(lián)網(wǎng)的創(chuàng)新理念,成熟完善的建站體系,開拓進(jìn)取的精神,專業(yè)的解決方案和顧問咨詢服務(wù),幫助客戶在互聯(lián)網(wǎng)時(shí)代提升形象、把握商機(jī)、實(shí)現(xiàn)價(jià)值,提高企業(yè)的核心競爭力。
閑來無事,申請(qǐng)了臺(tái)aws服務(wù)器在家搞點(diǎn)小東東,用golang做了個(gè)小東東,想放上去。自己的電腦是mac電腦,起初忘記了交叉編譯的事,直接編譯了下直接扔到aws,運(yùn)行的時(shí)候出現(xiàn)了不可以運(yùn)行的二進(jìn)制格式提示。
二、交叉編譯的過程
?1、隨手百度了下,很多文章都寫的“CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build”(不知你搜索到的是不是這個(gè)結(jié)果),看到這也挺簡單,分別是禁用cgo,指定目標(biāo)系統(tǒng),指定目標(biāo)CPU體系架構(gòu),然后編譯。
按照百度出來的建議,嘗試在電腦上編譯了下,提示如下錯(cuò)誤,如果沒有出現(xiàn)錯(cuò)誤的可以不用往下看了哈。
2、如第一步所述,是將CGO關(guān)閉的狀態(tài),如果程序用到了CGO,是不是就需要將CGO放開?將CGO放開又會(huì)是什么現(xiàn)象?具體如下:
從上述的錯(cuò)誤信息可以看出來,環(huán)境變量是生效的,確實(shí)是linux體系架構(gòu)了。
3、繼續(xù)百度, 終于發(fā)現(xiàn)這篇文章非常不錯(cuò),在這里和大家分享下,按照文章的操作就可以解決問題了,而且里面有非常詳細(xì)的講解。
實(shí)際業(yè)務(wù):go 二進(jìn)制文件在私有化部署中,需要對(duì)客戶的服務(wù)器mac和ip進(jìn)行綁定,系統(tǒng)只能運(yùn)行在綁定的服務(wù)器上。把mac和ip地址配置到config中。
運(yùn)行效果:系統(tǒng)可正常編譯,正常訪問,在用戶Auth接口進(jìn)行核對(duì)。
//檢驗(yàn)Mac和內(nèi)網(wǎng)IP,測(cè)試環(huán)境不做校驗(yàn)
func (c *CommonBase)CheckMacAndIp()error {
ipCfg :=g.Cfg().GetString("machine.Ipaddr")
macCfg :=g.Cfg().GetString("machine.Macip")
if ipCfg =="127.0.0.1" {
return nil
}
macArray,_ :=gipv4.GetMacArray()
if len(macArray) ==0 {
return gerror.New("mac地址獲取失敗")
}
if garray.NewStrArrayFrom(macArray).Contains(macCfg) ==false {
return gerror.New("示授權(quán)的應(yīng)用MAC,請(qǐng)聯(lián)系")
}
ipArray,_ :=gipv4.GetIpArray()
ipIntranetArray,_ :=gipv4.GetIntranetIpArray()
if len(ipArray) ==0 len(ipIntranetArray) ==0 {
return gerror.New("ip地址獲取失敗")
}
if garray.NewStrArrayFrom(ipArray).Merge(ipIntranetArray).Contains(ipCfg) ==false {
return gerror.New("示授權(quán)的應(yīng)用IP,請(qǐng)聯(lián)系")
}
return nil
}
項(xiàng)目使用GoFrame框架1.6。考慮到客戶可能會(huì)對(duì)內(nèi)存數(shù)據(jù)做分析破解,可以把mac和ip地址做AES加密。
GoLand 2018 for Mac 中文破解版是一款運(yùn)行在Mac平臺(tái)上的GO語言編程工具。我能為你提供一份完整的軟件,不過僅供個(gè)人使用,切勿傳播,希望可以幫助您。
安裝教程
1、goland 2018 mac 破解版鏡像包下載完成后打開,將左側(cè)的【GoLand】拖到右邊的應(yīng)用程序中進(jìn)行安裝。(鏡像包下載地址:)
2、在訪達(dá)中選擇“前往文件夾”。
3、輸入“/etc”后,點(diǎn)擊“前往”。
4、找到并將“hosts”文件拖到桌面
5、打開桌面的hosts文件,將“0.0.0.0 account.jetbrains.com”復(fù)制到“hosts”文件中,保存好內(nèi)容
6、然后將修改好的“hosts”文件拖回至“etc”文件夾中。
7、運(yùn)行JetBrains GoLand 2018,點(diǎn)擊“OK”。
8、選擇點(diǎn)擊“Activate”下的"activation code"
9、返回goland 2018 mac 破解版軟件包,找到并打開“GoLand 2018 注冊(cè)碼”
10、回到JetBrains GoLand 2018 for Mac 注冊(cè)頁面,輸入goland 2018 注冊(cè)碼后點(diǎn)擊“OK”,goland 2018 mac 破解版激活成功,大家可以盡情使用了。
我也有這方面的問題,我在mac os下:[mw_shl_code=shell,true]$ echo $GOOSwindows$ echo $GOARCH386$ go build -o hello.exe hello.go$ file hello.exehello.exe: Mach-O 64-bit executable x86_64[/mw_shl_code]
1、Sublime text
這個(gè)文本編輯器在編程界極為普遍,它并非一個(gè)完全成熟的IDE,但它具備了很多語言的擴(kuò)展插件,比如Pyhon、lua等,其中有一個(gè)插件GoSublime專門針對(duì)Go語言,提供了語法高亮、自動(dòng)補(bǔ)全等功能,這些功能使Sublime Text稱為一個(gè)很實(shí)用的Go IDE。
2、IntelliJ
由Jetbrains提供,在Java開發(fā)者中更為流行,其自帶的Go插件支持語法高亮顯示、代碼補(bǔ)全、自動(dòng)編譯以及子庫支持,這就使使用者可以很方便地將項(xiàng)目拆分成多個(gè)包,可以在一個(gè)單獨(dú)的IDE中瀏覽它。它有個(gè)很好用的功能,插件使用了突出顯示來顯示未使用的變量或包。
3、LiteIDE
目前也是一個(gè)專門針對(duì)Go的IDE了,功能很全面,具備語法高亮、自動(dòng)補(bǔ)全、自動(dòng)編譯、調(diào)試、包瀏覽及管理。調(diào)試器在后臺(tái)使用的gdb,這樣可以方便地打印變量值、查看當(dāng)前堆棧信息。
4、Intype
是僅Windows下支持的文本編輯器,具備有限的語法高亮支持和特定的高亮顯示設(shè)置。
5、Netbeans
Netbeans內(nèi)建支持了大量語言,同時(shí)具備Go插件,從而可以同創(chuàng)建正常項(xiàng)目一樣,創(chuàng)建Go源文件,除了語法高亮以外,其Go插件并不支持其他特殊功能,如何使用IDE編譯Go文件還不得而知。
6、Eclipse
最受歡迎的IDE,GoClipse插件在Eclipse中添加了IDE功能來支持Go,GoClipse提供了可配置的語法高亮顯示、自動(dòng)文檔補(bǔ)全、自動(dòng)編譯以及最重要的實(shí)驗(yàn)調(diào)試支持。
7、TextMate
是一個(gè)Mac OS下的文本編輯器,可擴(kuò)展它以突出顯示Go代碼,并提供源代碼片段。
8、Komodo Edit
來自ActiveState的開源代碼編輯器,基于Monzilla 7.0且支持跨平臺(tái),支持多種語言,但免費(fèi)版的Komodo功能有限,它的golang插件komodo-go提供了基本的語法高亮、代碼補(bǔ)全功能。
因?yàn)闃I(yè)務(wù)上的需求,架構(gòu)師改了hack了一下golang的源碼,放出一個(gè)patch文件,給源碼打了patch之后,需要重新編譯go源碼,
我是用 brew 安裝的golang, 先用 go env 看看
鎖定了源碼的路徑: /usr/local/Cellar/go/1.7.5/libexec
Go從1.5版本開始實(shí)現(xiàn)“自舉”(Bootstrap),也就是用Go來實(shí)現(xiàn)Go、用Go來編譯Go,因此這里的意思是系統(tǒng)默認(rèn)用go1.4來編譯golang,
但是我的系統(tǒng)里面并沒有g(shù)o1.4,這里偷個(gè)懶
等待編譯測(cè)試完成即可。