使用Go編譯為可執(zhí)行文件的方法實(shí)現(xiàn)
案例場(chǎng)景:創(chuàng)建一個(gè)兩層目錄,并在該目錄下創(chuàng)建一個(gè)文件,將“Hello World”字符寫(xiě)入該文件,并讀取出來(lái)。
目標(biāo):(1)測(cè)試案例是否能執(zhí)行成功;(2)編譯代碼成windows與linux兩種環(huán)境下的可執(zhí)行文件。
測(cè)試代碼文件名為main.go,內(nèi)容如下:
package main import ( "fmt" "io/ioutil" "os" ) func main() { // 文件夾名 _dir := "data/test" exist, err := pathExists(_dir) if err != nil { fmt.Printf("get dir error![%v]\n", err) return } if exist { fmt.Printf("has dir![%v]\n", _dir) } else { fmt.Printf("no dir![%v]\n", _dir) // 創(chuàng)建文件夾 //err := os.Mkdir(_dir, os.ModePerm) err := os.MkdirAll(_dir, 0666) if err != nil { fmt.Printf("mkdir failed![%v]\n", err) } else { fmt.Printf("mkdir success!\n") fileName := _dir + "/test.txt" // 創(chuàng)建文件 os.Create(fileName) // 打開(kāi)文件 file, _ := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0666) // 當(dāng)執(zhí)行完,關(guān)閉文件 defer file.Close() // 寫(xiě)內(nèi)容到文件中 file.WriteString("Hello World!") //讀取文件 data, _ := ioutil.ReadFile(fileName) // 打印內(nèi)容 fmt.Println(string(data)) } } } func pathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err }
經(jīng)過(guò)調(diào)試,上述代碼可正常執(zhí)行。測(cè)試通過(guò)。
編譯成windows環(huán)境exe可執(zhí)行文件過(guò)程,打開(kāi)文件所在目錄,在資源路徑框中輸入cmd,打開(kāi)cmd命令框,通過(guò)“go env”查看當(dāng)期環(huán)境變量,以windows10環(huán)境為例,默認(rèn)為windows環(huán)境。
// 配置環(huán)境變量 SET CGO_ENABLED=1 SET GOOS=windows SET GOARCH=amd64 // 編譯命令 go build main.go
編譯出來(lái)后就是一個(gè)可執(zhí)行文件main.exe,可用鼠標(biāo)雙擊直接執(zhí)行,傳到其他電腦上操作,依然可執(zhí)行,不依賴第三方包(不像Java會(huì)依賴JDK)。
執(zhí)行后,在main.exe所在目錄下,生成一個(gè)data/test/test.txt,并且打開(kāi)test.txt文件可看到Hello World。
編譯成Linux環(huán)境可執(zhí)行文件,此處除編譯環(huán)境參數(shù)外,其他步驟與上面類(lèi)似,編譯參數(shù)如下
// 配置參數(shù) SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 // 編譯命令 go build main.go
編譯輸出的可執(zhí)行文件名為main,上傳至centos7.x系統(tǒng),使用 “chmod +x main”添加可執(zhí)行權(quán)限,執(zhí)行 " ./main ",輸出結(jié)果與上述windows結(jié)果一樣。
備注:上述編譯環(huán)境所在的操作系統(tǒng)均為Windows10,即在windows10上開(kāi)發(fā)代碼,編譯輸出windows與linux兩種環(huán)境的可執(zhí)行文件。
到此這篇關(guān)于使用Go編譯為可執(zhí)行文件的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Go編譯為可執(zhí)行文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go語(yǔ)言中使用ent做關(guān)聯(lián)查詢的示例詳解
go語(yǔ)言的ent框架是facebook開(kāi)源的ORM框架,是go語(yǔ)言開(kāi)發(fā)中的常用框架,而關(guān)聯(lián)查詢又是日常開(kāi)發(fā)中的常見(jiàn)數(shù)據(jù)庫(kù)操作,故文本給出一個(gè)使用ent做關(guān)聯(lián)查詢的使用示例,需要的朋友可以參考下2024-02-02Go prometheus metrics條目自動(dòng)回收與清理方法
這篇文章主要為大家介紹了Go prometheus metrics條目自動(dòng)回收與清理方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Go語(yǔ)言同步等待組sync.WaitGroup結(jié)構(gòu)體對(duì)象方法詳解
這篇文章主要為大家介紹了Go語(yǔ)言同步等待組sync.WaitGroup結(jié)構(gòu)體對(duì)象方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Go語(yǔ)言入門(mén)教程之Arrays、Slices、Maps、Range操作簡(jiǎn)明總結(jié)
這篇文章主要介紹了Go語(yǔ)言入門(mén)教程之Arrays、Slices、Maps、Range操作簡(jiǎn)明總結(jié),本文直接給出操作代碼,同時(shí)對(duì)代碼加上了詳細(xì)注釋,需要的朋友可以參考下2014-11-11詳解Go語(yǔ)言RESTful JSON API創(chuàng)建
這篇文章主要介紹了詳解Go語(yǔ)言RESTful JSON API創(chuàng)建,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05手把手帶你走進(jìn)Go語(yǔ)言之運(yùn)算符解析
這篇文章主要介紹了手Go語(yǔ)言之運(yùn)算符解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09