Go語言編譯環(huán)境設(shè)置教程
Go語言優(yōu)勢
- 天生支持高并發(fā)
可以自由的去控制其并發(fā)量,也就是攜程,通過go routine關(guān)鍵字就行了。
- 自動垃圾回收機(jī)制
- 內(nèi)存的清理
- 不需要環(huán)境依賴
在運(yùn)行g(shù)o程序的時候是以二進(jìn)制的方式進(jìn)行運(yùn)行,go build之后是生成二進(jìn)制文件。
像windows的exec一樣,直接丟到Linux上面執(zhí)行就行了,不需要安裝任何環(huán)境。
- 云原生無縫接入
- 社區(qū)活躍度
- 易上手
下載 Go 配置編譯環(huán)境
如果要編寫和閱讀代碼,首先要編譯安裝這個語言的編譯環(huán)境,
- Go 安裝文件以及源代碼 https://golang.google.cn/dl/
- 下載對應(yīng)平臺的二進(jìn)制文件并安裝
- 環(huán)境變量
GOROOT
- go 的安裝路徑
GOPATH
src:存放源代碼pkg:存放依賴包,三方庫的安裝路徑bin:存放可執(zhí)行文件
如果是新環(huán)境需要創(chuàng)建 /Users/lulei/go/src/github.com這個目錄的,在這個目錄里面就可以去克隆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(因為防火墻的原因,好多依賴包是無法直接拉取的,設(shè)置這個那么會通過這個代理去拉)
配置 GOPROXY
Go默認(rèn)的GOPROXY的值是:GOPROXY=https://proxy.golang.org,direct。
這個goproxy在使用go get安裝第三方庫的時候會報錯,導(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
其他可選項
- Intellj goland,收費(fèi)軟件
- vim,sublime等
一些基本命令

項目執(zhí)行方式有兩種,第一種go build,生成二進(jìn)制文件main.exe,直接執(zhí)行即可。
PS C:\Users\lucas\GolandProjects\awesomeProject> go build main.go
編譯產(chǎn)生一個二進(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:下載一個包install:go install從github上面下載某一個包并且安裝到本地,相當(dāng)于是編譯安裝,所以很多時候開發(fā)一個go語言項目,上傳到GitHub上面,你希望別人可以使用你的項目,如果go get會將源代碼下載下來,如果是go install那么會將源代碼下載下來,編譯完成直接安裝,接下來就可以直接使用。
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 語言不支持動態(tài)鏈接,因此編譯時會將所有依賴編譯進(jìn)同一個二進(jìn)制文件。(無論拷貝到任何環(huán)境里面,因為所有依賴都會被編譯到一起,所以可以順利運(yùn)行的,代價就是安裝包會大一些)
指定輸出目錄。(go build 將go語言的源代碼編譯成一個二進(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)建的時候源代碼分離
常用環(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)
}寫任何程序的時候,都需要去做單元測試,如何驗證你寫的代碼是否健壯呢?
一種是手工測試,手工測試會有問題,當(dāng)你的程序不斷的改進(jìn)修改,重復(fù)的手工測試會使得你的整個開發(fā)效率非常低,所以在整個開發(fā)過程當(dāng)中都會有要求,我寫的業(yè)務(wù)邏輯都是需要對應(yīng)編寫測試用例的,這個測試用例第一步就是單元測試。
單元測試是面向代碼的,比如說你寫了一個函數(shù),你需要驗證這個函數(shù)在各種情況下的行為是否正常,你們就需要寫很多的測試用例,go語言原生自帶單元測試的支持。
- go test ./… -v 運(yùn)行測試
- go test命令掃描所有*_test.go為結(jié)尾的文件,慣例是將測試代碼與正式代碼放在同目錄, 如 foo.go 的測試代碼一般寫在 foo_test.go

編寫測試用例的時候,會將單測的代碼和主代碼放在一個包,這樣的好處是私有函數(shù),私有的變量都可以在單測里面被引用到。
Go vet
有些錯誤并不明顯,這個錯誤并不會影響編譯。但是它本身的邏輯會有一些小的瑕疵,在某些情況下可能會引發(fā)一些問題,針對這些情況,提供了上面這條命令。
它會檢測出程序運(yùn)行當(dāng)中可能出現(xiàn)的問題,比如下面??這些。

在多線程里面,哪個線程先執(zhí)行,哪個線程后執(zhí)行,這是不能確保的,如果主線程啟動了一些子線程去運(yùn)行,主線程立馬退出了,很可能子線程還沒有被正確的執(zhí)行,就會被一起退出。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Go語言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例
這篇文章主要為大家介紹了Go語言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
golang協(xié)程關(guān)閉踩坑實戰(zhàn)記錄
協(xié)程(coroutine)是Go語言中的輕量級線程實現(xiàn),下面這篇文章主要給大家介紹了關(guān)于golang協(xié)程關(guān)閉踩坑的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
Go中的函數(shù)選項模式(Functional Options Pattern)詳解
在 Go 語言中,函數(shù)選項模式是一種優(yōu)雅的設(shè)計模式,用于處理函數(shù)的可選參數(shù),本文將對其進(jìn)行講解,準(zhǔn)備好了嗎,快跟隨著本文一探究竟吧2023-06-06
Go語言映射內(nèi)部實現(xiàn)及基礎(chǔ)功能實戰(zhàn)
這篇文章主要為大家介紹了Go語言映射的內(nèi)部實現(xiàn)和基礎(chǔ)功能實戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-03-03

