Go語言編譯環(huán)境設(shè)置教程
Go語言優(yōu)勢
- 天生支持高并發(fā)
可以自由的去控制其并發(fā)量,也就是攜程,通過go routine關(guān)鍵字就行了。
- 自動(dòng)垃圾回收機(jī)制
- 內(nèi)存的清理
- 不需要環(huán)境依賴
在運(yùn)行g(shù)o程序的時(shí)候是以二進(jìn)制的方式進(jìn)行運(yùn)行,go build之后是生成二進(jìn)制文件。
像windows的exec一樣,直接丟到Linux上面執(zhí)行就行了,不需要安裝任何環(huán)境。
- 云原生無縫接入
- 社區(qū)活躍度
- 易上手
下載 Go 配置編譯環(huán)境
如果要編寫和閱讀代碼,首先要編譯安裝這個(gè)語言的編譯環(huán)境,
- Go 安裝文件以及源代碼 https://golang.google.cn/dl/
- 下載對(duì)應(yīng)平臺(tái)的二進(jìn)制文件并安裝
- 環(huán)境變量
GOROOT
- go 的安裝路徑
GOPATH
src
:存放源代碼pkg
:存放依賴包,三方庫的安裝路徑bin
:存放可執(zhí)行文件
如果是新環(huán)境需要?jiǎng)?chuàng)建 /Users/lulei/go/src/github.com這個(gè)目錄的,在這個(gè)目錄里面就可以去克隆GitHub的地址。
lulei@luleideMacBook-Pro github.com % pwd /Users/lulei/go/src/github.com lulei@luleideMacBook-Pro github.com % ls astaxie cespare hashicorp mitchellh prometheus beorn7 golang lovekeepcoding pkg shiena PS C:\Users\lucas\GolandProjects\awesomeProject> go env set GOROOT=C:/Users/lucas/sdk/go1.21.11 set GOPATH=C:\Users\lucas\go C:\Users\lucas\go\pkg\mod\cache
其他常用變量
GOOS,GOARCH,GOPROXY
國內(nèi)用戶建議設(shè)置goproxy:export GOPROXY=https://goproxy.cn(因?yàn)榉阑饓Φ脑颍枚嘁蕾嚢菬o法直接拉取的,設(shè)置這個(gè)那么會(huì)通過這個(gè)代理去拉)
配置 GOPROXY
Go默認(rèn)的GOPROXY的值是:GOPROXY=https://proxy.golang.org,direct。
這個(gè)goproxy在使用go get安裝第三方庫的時(shí)候會(huì)報(bào)錯(cuò),導(dǎo)致無法下載成功,所以必須要修改一下。
- windows使用如下命令
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.io,direct
- linux/macos
export GO111MODULE=on export GOPROXY=https://goproxy.io
IDE 設(shè)置(VS Code)
下載并安裝 Visual Studio Code https://code.visualstudio.com/download
安裝 Go 語言插件 https://marketplace.visualstudio.com/items?itemName=golang.go
其他可選項(xiàng)
- Intellj goland,收費(fèi)軟件
- vim,sublime等
一些基本命令
項(xiàng)目執(zhí)行方式有兩種,第一種go build,生成二進(jìn)制文件main.exe,直接執(zhí)行即可。
PS C:\Users\lucas\GolandProjects\awesomeProject> go build main.go
編譯產(chǎn)生一個(gè)二進(jìn)制文件
其次就是go run main.go,先將main.go去編譯了,編譯好之后直接執(zhí)行,然后可執(zhí)行文件是不保留的。
PS C:\Users\lucas\GolandProjects\awesomeProject> go run main.gohello golang
build
:從源代碼構(gòu)建成可執(zhí)行文件get
:下載一個(gè)包install
:go install從github上面下載某一個(gè)包并且安裝到本地,相當(dāng)于是編譯安裝,所以很多時(shí)候開發(fā)一個(gè)go語言項(xiàng)目,上傳到GitHub上面,你希望別人可以使用你的項(xiàng)目,如果go get會(huì)將源代碼下載下來,如果是go install那么會(huì)將源代碼下載下來,編譯完成直接安裝,接下來就可以直接使用。
module awesomeProject2 go 1.16 require github.com/lovekeepcoding/testmath v0.0.0-20220225034816-3d3a22d574b6 // indirect lulei@luleideMacBook-Pro awesomeProject2 % go get github.com/lovekeepcoding/testmath go get: added github.com/lovekeepcoding/testmath v0.0.0-20220225034816-3d3a22d574b6
module
用來做依賴管理的test
用來做單元測試的
Go build
Go 語言不支持動(dòng)態(tài)鏈接,因此編譯時(shí)會(huì)將所有依賴編譯進(jìn)同一個(gè)二進(jìn)制文件。(無論拷貝到任何環(huán)境里面,因?yàn)樗幸蕾嚩紩?huì)被編譯到一起,所以可以順利運(yùn)行的,代價(jià)就是安裝包會(huì)大一些)
指定輸出目錄。(go build 將go語言的源代碼編譯成一個(gè)二進(jìn)制文件)
go build –o bin/mybinary .
lulei@luleideMacBook-Pro awesomeProject4 % go build lulei@luleideMacBook-Pro awesomeProject4 % ls awesomeProject4 go.mod main.go lulei@luleideMacBook-Pro awesomeProject4 % ./awesomeProject4 3
在構(gòu)建的時(shí)候源代碼分離
常用環(huán)境變量設(shè)置編譯操作系統(tǒng)和 CPU 架構(gòu)。
GOOS=linux GOARCH=amd64 go build
全支持列表。
$GOROOT/src/go/build/syslist.go
Go test
Go 語言原生自帶測試
import "testing" func TestIncrease(t *testing.T) { t.Log("Start testing") increase(1, 2) }
寫任何程序的時(shí)候,都需要去做單元測試,如何驗(yàn)證你寫的代碼是否健壯呢?
一種是手工測試,手工測試會(huì)有問題,當(dāng)你的程序不斷的改進(jìn)修改,重復(fù)的手工測試會(huì)使得你的整個(gè)開發(fā)效率非常低,所以在整個(gè)開發(fā)過程當(dāng)中都會(huì)有要求,我寫的業(yè)務(wù)邏輯都是需要對(duì)應(yīng)編寫測試用例的,這個(gè)測試用例第一步就是單元測試。
單元測試是面向代碼的,比如說你寫了一個(gè)函數(shù),你需要驗(yàn)證這個(gè)函數(shù)在各種情況下的行為是否正常,你們就需要寫很多的測試用例,go語言原生自帶單元測試的支持。
- go test ./… -v 運(yùn)行測試
- go test命令掃描所有*_test.go為結(jié)尾的文件,慣例是將測試代碼與正式代碼放在同目錄, 如 foo.go 的測試代碼一般寫在 foo_test.go
編寫測試用例的時(shí)候,會(huì)將單測的代碼和主代碼放在一個(gè)包,這樣的好處是私有函數(shù),私有的變量都可以在單測里面被引用到。
Go vet
有些錯(cuò)誤并不明顯,這個(gè)錯(cuò)誤并不會(huì)影響編譯。但是它本身的邏輯會(huì)有一些小的瑕疵,在某些情況下可能會(huì)引發(fā)一些問題,針對(duì)這些情況,提供了上面這條命令。
它會(huì)檢測出程序運(yùn)行當(dāng)中可能出現(xiàn)的問題,比如下面??這些。
在多線程里面,哪個(gè)線程先執(zhí)行,哪個(gè)線程后執(zhí)行,這是不能確保的,如果主線程啟動(dòng)了一些子線程去運(yùn)行,主線程立馬退出了,很可能子線程還沒有被正確的執(zhí)行,就會(huì)被一起退出。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
go rate 原生標(biāo)準(zhǔn)限速庫的使用
本文主要介紹了Go標(biāo)準(zhǔn)庫golang.org/x/time/rate實(shí)現(xiàn)限流,采用令牌桶算法控制請(qǐng)求速率,提供Allow/Reserve/Wait方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-05-05Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析
這篇文章主要為大家介紹了Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08golang框架中跨服務(wù)的最佳通信協(xié)議和工具
在 go 框架中實(shí)現(xiàn)跨服務(wù)通信的最佳實(shí)踐包括使用 grpc(適用于低延遲高吞吐量)、http 客戶端(適用于 restful api)和消息隊(duì)列(適用于異步解耦通信),在選擇通信方式時(shí),應(yīng)考慮服務(wù)交互模式、性能要求和部署環(huán)境等因素2024-06-06Golang中g(shù)RPC內(nèi)置Trace的實(shí)現(xiàn)
gRPC內(nèi)置了基于golang.org/x/net/trace包的客戶端和服務(wù)端請(qǐng)求追蹤,默認(rèn)開啟狀態(tài),可以查看事件和請(qǐng)求日志,幫助調(diào)試,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03go語言通過odbc操作Access數(shù)據(jù)庫的方法
這篇文章主要介紹了go語言通過odbc操作Access數(shù)據(jù)庫的方法,實(shí)例分析了Go語言通過odbc連接、查詢與關(guān)閉access數(shù)據(jù)庫的技巧,需要的朋友可以參考下2015-03-03Golang?中判斷兩個(gè)結(jié)構(gòu)體相等的方法
這篇文章主要介紹了Golang?中如何判斷兩個(gè)結(jié)構(gòu)體相等,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08