使用Go編譯為可執(zhí)行文件的方法實現(xiàn)
案例場景:創(chuàng)建一個兩層目錄,并在該目錄下創(chuàng)建一個文件,將“Hello World”字符寫入該文件,并讀取出來。
目標:(1)測試案例是否能執(zhí)行成功;(2)編譯代碼成windows與linux兩種環(huán)境下的可執(zhí)行文件。
測試代碼文件名為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) // 打開文件 file, _ := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0666) // 當執(zhí)行完,關(guān)閉文件 defer file.Close() // 寫內(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)過調(diào)試,上述代碼可正常執(zhí)行。測試通過。
編譯成windows環(huán)境exe可執(zhí)行文件過程,打開文件所在目錄,在資源路徑框中輸入cmd,打開cmd命令框,通過“go env”查看當期環(huán)境變量,以windows10環(huán)境為例,默認為windows環(huán)境。
// 配置環(huán)境變量 SET CGO_ENABLED=1 SET GOOS=windows SET GOARCH=amd64 // 編譯命令 go build main.go
編譯出來后就是一個可執(zhí)行文件main.exe,可用鼠標雙擊直接執(zhí)行,傳到其他電腦上操作,依然可執(zhí)行,不依賴第三方包(不像Java會依賴JDK)。
執(zhí)行后,在main.exe所在目錄下,生成一個data/test/test.txt,并且打開test.txt文件可看到Hello World。
編譯成Linux環(huán)境可執(zhí)行文件,此處除編譯環(huán)境參數(shù)外,其他步驟與上面類似,編譯參數(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上開發(fā)代碼,編譯輸出windows與linux兩種環(huán)境的可執(zhí)行文件。
到此這篇關(guān)于使用Go編譯為可執(zhí)行文件的方法實現(xiàn)的文章就介紹到這了,更多相關(guān)Go編譯為可執(zhí)行文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go語言中使用ent做關(guān)聯(lián)查詢的示例詳解
go語言的ent框架是facebook開源的ORM框架,是go語言開發(fā)中的常用框架,而關(guān)聯(lián)查詢又是日常開發(fā)中的常見數(shù)據(jù)庫操作,故文本給出一個使用ent做關(guān)聯(lián)查詢的使用示例,需要的朋友可以參考下2024-02-02Go prometheus metrics條目自動回收與清理方法
這篇文章主要為大家介紹了Go prometheus metrics條目自動回收與清理方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11Go語言同步等待組sync.WaitGroup結(jié)構(gòu)體對象方法詳解
這篇文章主要為大家介紹了Go語言同步等待組sync.WaitGroup結(jié)構(gòu)體對象方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08Go語言入門教程之Arrays、Slices、Maps、Range操作簡明總結(jié)
這篇文章主要介紹了Go語言入門教程之Arrays、Slices、Maps、Range操作簡明總結(jié),本文直接給出操作代碼,同時對代碼加上了詳細注釋,需要的朋友可以參考下2014-11-11詳解Go語言RESTful JSON API創(chuàng)建
這篇文章主要介紹了詳解Go語言RESTful JSON API創(chuàng)建,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05