go語言的「1.10」版本支援xp系統。 golang1.10是最後支援windows xp/2003的版本,因此如果想要golang編譯的程式可以在winxp/2003上執行,則需要下載golang1.10;之後的版本則最低要求Win7/2008作業系統。
本教學操作環境:linux7.3系統、GO 1.18版本、Dell G3電腦。
Go語言開發的版本
#Go語言程式的開發主要依賴golang編譯器。編譯器分為GC(Go Compiler)和GCCGo。目前,golang官方可以下載的是GC版本,GCCGo則是由GCC組織維護。
golang1.10是最後支援windows xp/2003的版本,因此如果想要golang編譯的程式可以在winxp/2003上執行,則需要下載golang1.10。之後的版本則最低要求Win7/2008作業系統。
對於Linux作業系統而言,golang支援的最低核心版本為2.6.23。這對Redhat 而言,至少是RHEL6.0(2.6.32-71);對於CentOS而言,至少是CentOS6.0(2.6.32-71);對於Oracle Linux而言,至少是OL5.6(2.6 .32-100.26.2.el5uek);對於Ubuntu而言,至少是10.04;對於Suse Linux而言,至少是SLE11(Suse Linux Enterprise 11)。 【相關推薦:Go影片教學、程式教學】
對Unix而言,FreeBSD可以採用GC,但對於非x86處理器的作業系統而言,則需要採用GCCGo編譯器。
進行Go語言開發的要素
#(1 )編譯器
將程式碼編譯為二進位執行檔的命令工具。其實這裡應該叫「建構器」比較適合。因為程式碼寫完成後,輸入「go build」指令,可以直接將程式碼「編譯」並「連結」為執行檔。
術語「編譯」與「連結」的定義來自於C語言
C語言程式碼由固定的詞彙按照固定的格式組織起來,簡單直觀,程式設計師容易識別和理解,但對於CPU,C語言代碼就是天書,根本不認識,CPU只認識幾百個二進位形式的指令。這就需要一個工具,將C語言程式碼轉換成CPU能夠辨識的二進位指令,這個工具是一個特殊的軟體,叫做編譯器(Compiler)。
C語言程式碼經過編譯以後,並沒有產生最終的執行檔(.exe 檔案),而是產生了一種叫做目標檔案(Object File)的中間檔案(或說是暫存檔案)。目標檔案也是二進位形式的,它和可執行檔的格式是一樣的。對於 Visual C ,目標檔案的後綴是.obj;對於 GCC,目標檔案的後綴是.o。
目標檔案經過連結(Link)以後才能變成可執行檔。既然目標檔案和執行檔的格式是一樣的,為什麼還要再連結一次呢,直接當執行檔不行嗎?
不行的!因為編譯只是將我們自己寫的程式碼變成了二進位形式,它還需要和系統元件(例如標準函式庫、動態連結函式庫等)結合起來,這些元件都是程式運作所必須的。
連結(Link)其實就是一個「打包」的過程,它將所有二進位形式的目標檔案和系統元件組合成一個可執行檔。完成連結的過程也需要一個特殊的軟體,叫做連結器(Linker)。
(2)擴充包/元件
在進行程式編寫的過程中,如果所有的「支援程式」或「工具類別」都由開發人員從零開始實現,工作量會變得很大。因此要提高開發效率,大多數情況下會嘗試尋找輔助程式開發的「擴充包」或「元件」。 golang自備套件管理工具,因此開發時可以依照具體需求透過指令下載擴充包。
(3)程式碼編寫與調試
可以透過任何文字編輯器開發程式碼,然後透過GC編譯器編譯程序,當然也可以透過”go run”命令直接運行。如果需要調試程序,大多數情況下最安全、穩健、可信的方式是在程式中輸出日誌。如果非要單點調試,可以採用delve。
環境建構
#(1)下載並解壓縮
##
cd usr/local wget https://golang.google.cn/dl/go1.15.6.linux-amd64.tar.gz tar xf go1.15.6.linux-amd64.tar.gz cd go
(2)建立軟連線
ln -s usr/local/go/bin/go usr/local/bin/go
(3)範例:Hello world
cd usr/local/src mkdir -p go/helloworld cd go/helloworld/ vim main.go輸入如下程式碼:
package main import( "fmt" ) func main(){ fmt.Println("Hello world") }儲存退出,然後執行如下指令
go run main.go此時,系統會有下列輸出:
建置
######################################### #####如果每次都通过go run去执行程序,则需要在发布程序时需要带上golang的运行时环境。这显然是不能满足要求的。可以将程序直接构建为可执行文件。
键入如下命令:
go build
此时,会在当前目录下产生一个helloworld的可执行文件
运行这个文件,会得到与go run 相同的结果。
./helloworld
使用扩展包
golang的扩展包有多种不同的管理方式。比如传统的 go get 方式以及新推出对的go module方式。
对于go get方式,由于某些特殊原因,部分官方包无法从golang.org下载,因此需要采取手动下载与go get相结合的方式。
对于go module方式,由于可以采用goproxy代理的方式获取golang.org的基础包,因此完美解决了国内golang开发的难题。
然而go module只有1.13版本之后的golang才能支持。而1.13是不支持winxp/2003的。并且对于go get与go module而言,有关代码在引包的时候,写法多少有些不同。因此如果要开发兼容低版本操作系统的程序,仍然建议采用go get进行包管理。
这里只介绍通过go module管理包的方式
以读取mongodb数据为例,介绍如何使用go module引入mongodb客户端扩展包,并读取数据。
设置goproxy代理
go env -w GOPROXY=https://goproxy.cn,direct
创建项目目录,并初始化
mkdir -p go/mongodemo cd go/mongodemo/ go mod init mongodemo
此时,会在mongodemo目录下生成go.mod文件
然后编辑main.go,输入如下代码:
package main import ( "fmt" "log" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) type cfg_host struct { Host string Cfg_data string } func main() { user := "用户名" password := "密码" port := "端口" ip := "localhost" url := fmt.Sprintf("mongodb://%s:%s@%s:%s",user,password,ip,port) session, err := mgo.Dial(url) if err != nil { panic(err) } defer session.Close() Optional. Switch the session to a monotonic behavior. session.SetMode(mgo.Monotonic, true) c := session.DB("db").C("cfg_hosts") var cfgs []cfg_host err = c.Find(bson.M{}).All(&cfgs) if err != nil { log.Fatal(err) } for _,item := range cfgs { fmt.Printf("%s\n",item.Host) fmt.Printf("%s\n",item.Cfg_data) } }
构建
go build
此时,go module
会自动下载依赖包
同时,生成了名为“mongodemo”的可执行文件
执行该文件,输出了mongodb中的查询结果
更多编程相关知识,请访问:编程视频!!
以上是go語言哪個版本支援xp的詳細內容。更多資訊請關注PHP中文網其他相關文章!