Go 語言之 開發工具
一:Go語言介紹
Go 語言是什么
2009年11月10日,Go語言正式成為開源編程語言家庭的一員。
Go語言(或稱Golang)是雲計算時代的C語言。Go語言的誕生是為了讓程序員有更高的生產效率,Go語言專門針對多處理器系統應用程序的編程進行了優化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持並行進程。
開發人員在為項目選擇語言時,不得不在快速開發和性能之間做出選擇。C和C++這類語言提供了很快的執行速度,而 Ruby 和 Python 這類語言則擅長快速開發。Go語言在這兩者間架起了橋梁,不僅提供了高性能的語言,同時也讓開發更快速。
Go語言優勢
-
可直接編譯成機器碼,不依賴其他庫,glibc的版本有一定要求,部署就是扔一個文件上去就完成了。
-
靜態類型語言,但是有動態語言的感覺,靜態類型的語言就是可以在編譯的時候檢查出來隱藏的大多數問題,動態語言的感覺就是有很多的包可以使用,寫起來的效率很高。
-
語言層面支持並發,這個就是Go最大的特色,天生的支持並發。Go就是基因里面支持的並發,可以充分的利用多核,很容易的使用並發。
-
內置runtime,支持垃圾回收,這屬於動態語言的特性之一吧,雖然目前來說GC(內存垃圾回收機制)不算完美,但是足以應付我們所能遇到的大多數情況,特別是Go1.1之后的GC。
-
簡單易學,Go語言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go關鍵字是25個,但是表達能力很強大,幾乎支持大多數你在其他語言見過的特性:繼承、重載、對象等。
-
豐富的標准庫,Go目前已經內置了大量的庫,特別是網絡庫非常強大。
-
內置強大的工具,Go語言里面內置了很多工具鏈,最好的應該是gofmt工具,自動化格式化代碼,能夠讓團隊review變得如此的簡單,代碼格式一模一樣,想不一樣都很困難。
-
跨平台編譯,如果你寫的Go代碼不包含cgo,那么就可以做到window系統編譯linux的應用,如何做到的呢?Go引用了plan9的代碼,這就是不依賴系統的信息。
-
內嵌C支持,Go里面也可以直接包含C代碼,利用現有的豐富的C庫。
Go 適合用來做什么
-
服務器編程,以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日志、數據打包、虛擬機處理、文件系統等。
-
分布式系統,數據庫代理器等。
-
網絡編程,這一塊目前應用最廣,包括Web應用、API應用、下載應用。
-
內存數據庫,如google開發的groupcache,couchbase的部分組建。
-
雲平台,目前國外很多雲平台在采用Go開發,CloudFoundy的部分組建,前VMare的技術總監自己出來搞的apcera雲平台。
二:Go語言開發環境和工具
go語言編譯器: 官方地址:https://golang.google.cn/dl/
鏈接:https://pan.baidu.com/s/1twRPDRR_oKyfxQhwKqk1ag?pwd=20n2
提取碼:20n2
VSCode:
鏈接:https://pan.baidu.com/s/1WWfdqU1nvNJJDxnFLCHEXw?pwd=4e9c
提取碼:4e9c
go語言編譯器安裝
安裝
安裝,只要注意 go 的安裝路徑,其他全部默認,點擊下一步即可
安裝完畢后,進入到go 的安裝路徑。在安裝目錄下,有個bin 目錄,這個go的命令存放目錄
設置和修改環境變量
在自己想要的位置,新建文件夾goproject ,用於存放項目。在goproject 文件夾下,新建文件夾src ,用於存放源碼
右擊此電腦---->屬性----->高級設置--->環境變量
在用戶變量中,有GOPATH,這里定義的路徑,是我們擴程序下載存放的目錄。 以及在PATH 路徑中,定義了go的執行文件,路徑。
這兩個我們都要刪除
新建系統變量。變量名: GOROOT ,變量值:go的安裝目錄
修改Path 路徑,將go 的安裝目錄下的 bin 目錄,加入到Path路徑中
****
新建系統變量GOPATH,這個是go的環境變量,設置項目,源碼的存放路徑。變量名為GOPATH ,變量值為新建的goproject目錄的位置
使用win+r ,輸入 cmd ,打開windows的命令行
使用go version 查看go 版本,如果能夠看到go 的版本號,說明path 路徑生效
使用go env 能夠查看到go的環境變量。此時可以看到GOPATH和GOROOT的值都是我們之前設置的
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Administrator\AppData\Local\go-build
set GOENV=C:\Users\Administrator\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=F:\goproject\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=F:\goproject
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.8
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build3145478798=/tmp/go-build -gno-record-gcc-switches
安裝vscode
安裝
在安裝完畢,啟動進入后,可以選擇安裝中文包
三 vs加載goproject項目,下載go擴展
文件--->打開文件夾(Open Folder....)--->找到 goproject目錄---->打開文件夾
此時會自動加載src文件夾
點擊左側的擴展,然后搜go ,安裝GO
回到資源管理,選中src,然后點擊新建文件夾,文件夾名,如dev_code
然后繼續選中,在dev_code下繼續創建文件夾,如day1,然后繼續選中,創建文件夾example1.
此時,創建的文件依次遞進。在目錄goproject 的src 目錄下,也會依次生成目錄
在example1 目錄先,新建文件 text.go ,文件需要以 .go 擴展名結尾
創建完畢后,會跳出彈窗,要求下載 go擴展。 但是因為是從github上下載,所以不一定會成功。此時需要配置代理
go 的代理地址網站:https://goproxy.io/zh/
打開環境變量設置,新建系統變量
變量名: GOPROXY
變量值:https://proxy.golang.com.cn,direct
設置完代理后,關閉vscode,重新打開,然后會再次彈出下載go擴展,點擊下載全部install all
此時,在輸出 欄,會告訴你 下載一下的插件
需要看到All tools successfully installed. You are ready to Go :). 才下載完畢。如果有擴展沒有下載下倆,可以關閉vscode,然后重新打開,會自動彈出對話框,要求下載,然后重新下載即可
如果go擴展插件下載,出現報錯Error:無法解析不存在的文件 ,可以不用管它,只要最終出現All tools successfully installed. You are ready to Go :).即可
四:編寫和打包第一個GO程序
編寫程序
在test.go中,編寫以下程序(輸出hello world)
// 定義一個包,每個go文件都要歸屬於一個包
package main
//導入工具包,可以使用包中的方法,函數。實現相關的功能
//輸出語句,屬於fmt 包
import (
"fmt"
)
// 定義運行的主函數(每個程序都有主函數,是程序的唯一的入口。入口有且只有一個,出口可以有多個)
//函數名不可以亂寫,必須是main
func main() {
//使用fmt包里的Println功能。print打印, ln 表示自動轉行的功能
fmt.Println("hello world")
}
然后,按ctrl +s 保存。或者在 文件--->保存
運行程序
運行程序方法一:(使用擴展code runner)
擴展--->搜索code runner --->安裝coderunner擴展
安裝完畢后,返回test.go,頁面,點擊右上角的三角符號,運行程序。
運行程序方法二:(腳本方式運行)
在終端,以腳本的方式運行
進入到腳本所在的目錄
cd .\src\dev_code\day1\example1\
ls
go run .\text.go
運行程序方法三(對程序腳本打包)
將腳本進行構建成程序,然后運行程序
go build .\src\dev_code\day1\example1\text.go
ls
.\text.exe
運行程序方法四(對程序所在目錄打包)
當一個目錄下有多個腳本文件時,我們可以直接對目錄進行構建
// 對example1 目錄進行構建
go build .\src\dev_code\day1\example1
對整個目錄構建,報錯go: go.mod file not found in current directory or any parent directory; see 'go help modules'
Package包波浪線說明:這是因為gomod和gopath兩個包管理方案,並且相互不兼容
即使項目在GOPATH 定義的路徑中,GO111MODULE=on 仍然強制使用Go模塊。仍然需要go.mod才能正常工作
go env
//獲取到的環境變量如下
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Administrator\AppData\Local\go-build
set GOENV=C:\Users\Administrator\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=F:\goproject\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=F:\goproject
set GOPRIVATE=
set GOPROXY=https://proxy.golang.com.cn,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.8
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build3492386364=/tmp/go-build -gno-record-gcc-switches
此時,我們可以關閉GO111MODULE
go env -w GO111MODULE=off
go env
//獲取到的go 環境變量如下
set GO111MODULE=off
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Administrator\AppData\Local\go-build
set GOENV=C:\Users\Administrator\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=F:\goproject\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=F:\goproject
set GOPRIVATE=
set GOPROXY=https://proxy.golang.com.cn,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.8
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build2414259400=/tmp/go-build -gno-record-gcc-switches
注意,項目要在GOPATH定義的目錄中
再次構建整個目錄
go build .\src\dev_code\day1\example1
ls
.\example1.exe
五 附錄
GOPATH路徑不生效
即使我們在系統變量里設置了GOPATH的路徑,但是依舊不生效,使用go env 查看,獲取到的結果也不是我們定義的
這是因為go 默認在用戶 環境設置里 定義 GOPATH,並且,也在用戶環境變量里 定義了PATH路徑。這會覆蓋系統變量。 我們需要 刪除 用戶環境設置里的 GOPATH以及用戶環境變量里PATH變量里go 的那一部分
調整vscode的字體大小
文件--->首選項---->設置---->Font Size