詳解Win系統下怎麼搭建Golang開發環境

2022-11-23 22:00:22
本篇文章給大家詳細講述如何在 Windows 系統上搭建 Go語言的開發環境,以供借鑑或參考。文章將介紹Go語言的VSCode、GoLand、Vim三種開發環境,大家可以靈活選擇。

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

1、Go語言簡介

Go語言(又稱Golang),起源於2007年,並在2009年由Google正式對外發布。Go語言是一種靜態強型別、編譯型、並行型,並具有垃圾回收功能的程式語言,它的主要目標是「兼具 Python 等動態語言的開發速度和 C/C++ 等編譯型語言的效能與安全性」。Go語言目前可以達到C/C++ 80%的執行效能,其編譯速度遠快於Java和C/C++。【相關推薦:Go視訊教學

與C++相比,Go並不包括如列舉、例外處理、繼承、泛型、斷言、虛擬函式等功能,但增加了 切片(Slice) 型、並行、管道、垃圾回收、介面(Interface)等特性的語言級支援。Go 2.0版本將支援泛型,對於斷言的存在,則持負面態度,同時也為自己不提供型別繼承來辯護。

Go語言是程式語言設計的又一次嘗試,是對類C語言的重大改進,它不但能讓你存取底層作業系統,還提供了強大的網路程式設計和並行程式設計支援。Go語言的用途眾多,可以進行網路程式設計、系統程式設計、並行程式設計、分散式程式設計。

GO語言有如下特性:

  • 靜態編譯
  • 垃圾回收
  • 簡潔的符號和語法
  • 平坦的型別系統
  • 基於CSP的並行模型。
  • 高效簡單的工具鏈。
  • 豐富的標準庫

Go語言的推出,旨在不損失應用程式效能的情況下降低程式碼的複雜性,具有「部署簡單、並行性好、語言設計良好、執行效能好」等優勢,目前國內諸多 IT 公司均已採用Go語言開發專案,特別是在大型網際網路公司有著廣泛的應用。

很多重要的開源專案都是使用Go語言開發的:

1)Docker:火熱的容器化技術
2)Kubernetes:Goole Borg 的開源實現
3)LXD:另一個容器化技術,其定位是系統容器,直接對標虛擬機器器。
4)Etcd:類似 zookeeper 的高可用 key-value 儲存
5)TIDB:國人開發的 Goole spanner 的開源實現。定位於線上事務處理/線上分析處理( HTAP: Hybrid Transactional/Analytical Processing)的融合型資料庫產品,實現了一鍵水平伸縮,強一致性的多副本資料安全,分散式事務,實時OLAP 等重要特性。同時相容 MySQL 協定和生態,遷移便捷,運維成本極低。

2、安裝Git

Go語言開發過程中用到的第三方包,需要使用 git 下載,因此 git 是必不可少的。下載地址為:https://gitforwindows.org。

假設安裝路徑為 C:\Program Files\Git,需要將以下路徑新增到環境變量 PATH:

C:\Program Files\Git\bin
C:\Program Files\Git\cmd

這個地方初學者需要注意一下,Git預設是採用命令列手動輸入命令去操作的。還可以像SVN那樣通過UI介面去做操作,只要下載TortoiseGit就好了。

3、Go 工具鏈(編譯器)安裝

先到GO語言官網 下載最新版本的GO語言安裝包,雙擊按照嚮導完成安裝:

Golang開發環境涉及到幾個環境變量,比較重要的是:GOROOT,GOPATH。使用go env命令就可以檢視 Go 的環境變量,不帶引數列印所有環境變量:

λ go env
 
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\zhuyadong\AppData\Local\go‐build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\zhuyadong\go
set GOPROXY=https://goproxy.io
set GORACE=
set GOROOT=D:\Program\Go
set GOTMPDIR=
set GOTOOLDIR=D:\Program\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
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 ‐fmessage‐length=0 ‐fdebug‐prefix‐map=C:\Temp
登入後複製

3.1、環境變數GOROOT

GOROOT其實就是Golang的安裝目錄。新版本的GOROOT已經不需要設定了。Golang編譯器安裝後,會自動把%GOROOT%\bin目錄新增到環境變數PATH。

如下所示,這是我電腦上安裝完 Golang 後,在命令列中輸出的Go版本:

λ go version
2 go version go1.19.2 windows/amd64
登入後複製

3.2、環境變數GOPATH

可以把GOPATH指向的目錄,理解為工作目錄,其作用是告訴Go命令和其它相關工具,在哪裡找系統上安裝的Go包。

GOPATH可以指向多個路徑,與其它環境變數的設定一樣,用相同的分割符分割。windiows 系統分割符是 ; ,linux 系統分割符是 : 。

預設的GOPATH是%USERPROFILE%\go\bin。在沒有Go Modules之前,通常都需要修改GOPATH的值。GOPATH 的目錄結構,是約定好的,不可修改:

GOPATH
├─bin 存放安裝的第三方工具
├─pkg 存放編譯的第三方庫
└─src 原始碼目錄
├─demo 這是你自已的專案原始碼,每個專案一個目錄
└─github.com 這是從 github.com 下載的第三庫、工具的原始碼

3.3、Go常用命令

go build 在原始碼目錄執行該命令,編譯該目錄下的原始碼,生成可執行程式或庫。

go install 除了編譯,還進行安裝(將生成的結果拷貝到指定目錄)。可執行程式拷貝到 %GOPATH%\bin,庫拷貝到 %GOPATH%\pkg。

go get 從遠端倉庫獲取程式碼,同時進行編譯和安裝。

4、包管理

由於國內眾所周知的網路原因,不能直接存取 golang 的官方網站,由此導致不能自動安裝依賴項,這也是搭建 Go 開發環境最麻煩的地方。為解決網路問題,有以下幾種方法:

1)方法1:找一個可用的 VPN。
2)方法2:安裝失敗後,檢視紀錄檔,到 github.com 上查詢對應的庫,下載到本機的對應位置,再執行 go install 進行安裝。
3)方法3:使用 gopm 包管理工具,後面詳解。
4)方法4:啟用 Go Modules,並設定 GOPROXY 使用代理。

這里提供手動安裝依賴的方法,只需要安裝一次,其它各種開發環境都可以共用使用。

4.1、go module

自從 Go 官方推出 v1.11 之後,增加新的依賴管理模組並且更加易於管理專案中所需要的模組。模組是儲存在檔案樹中的 Go 包的集合,其根目錄中包含 go.mod 檔案。 go.mod 檔案定義了模組的路徑,它也是用於根目錄的匯入路徑,以及它的依賴性要求。每個依賴性要求都被寫為模組路徑和特定語意版本。

從 Go 1.11 開始,Go 允許在 $GOPATH/src 外的任何目錄下使用 go.mod 建立專案。在 $GOPATH/src 中,為了相容性,Go 命令仍然在舊的 GOPATH 模式下運行。當 module 功能啟用時, GOPATH 在專案構建過程中不再擔當 import 的角色,但它仍然儲存下載的依賴包,具體位置在 $GOPATH/pkg/mod 。

為了保持與相容,環境變量如下設定:

  • GOROOT : 不需要設定,設定了也沒關係
  • GOPATH : 保持預設。設定其它目錄也可以,但 專案程式碼 不能放在%GOPATH%\src 目錄下,否則 go module 需要明確啟用
  • GO111MODULE : 保持預設。
  • GOPROXY : 值為 https://goproxy.io 。設定代理,啟用模組後,用於下載需要翻牆才能存取的包。
  • 其它可用的代理網址:

https://goproxy.io
https://athens.azurefd.net
https://goproxy.cn
https://gocenter.io

Go官方推出官方模組代理是 https://proxy.golang.org (被牆狀態);github上的映象倉庫:https://github.com/goproxyio/goproxy 。

這樣設定的好處是,當專案原始碼在 %GOPATH%\src 目錄下時,使用舊版本的模式查
找第三方工具、包;當專案原始碼不在 %GOPATH%\src 目錄下,並且其父路徑上的任
何一個目錄有 go.mod 檔案,就自動啟用 go module。

GO111MODULE 有以下幾種值:

  • off:go 命令行將不會支援 module 功能,尋找依賴包的方式將會沿用舊版本那種通過 vendor 目錄或者 GOPATH 模式來查詢。
  • on:go命令行會使用 modules,而一點也不會去 GOPATH 目錄下查詢。
  • auto:預設值,go 命令行將會根據當前目錄來決定是否啟用 module 功能。這種情況下可以分為兩種情形:當前目錄在 GOPATH/src 之外,且該目錄包含go.mod 檔案,或者該目錄是包含 go.mod 檔案的目錄的子目錄。

開啟命令行,保證當前目錄不是 %GOPATH% 及其子目錄,執行 go get 即可正常安裝第三方工具包。

4.2、gopm

gopm 是 Go 的一個包管理工具,有如下特性:

  • 無需 Git 和 Hg 等版本管理工具,就可以下載指定版本的 Go 語言套件
  • 可以解決翻牆問題,在國內有加速效果
  • 只能下載依賴的包的原始碼,不能編譯安裝

官方網址:https://gopm.io
安裝方法: go get ‐u github.com/gpmgo/gopm

gopm基本用法:

# 檢視當前工程依賴
gopm list
# 顯示依賴詳細資訊
gopm list ‐v
# 列出檔案依賴
gopm list ‐t [file]
# 拉取依賴到快取目錄
gopm get ‐r xxx
# 僅下載當前指定的包
gopm get ‐d xxx
# 拉取依賴到 $GOPATH
gopm get ‐g xxx
# 檢查更新所有包
gopm get ‐u xxx
# 拉取到當前所在目錄
gopm get ‐l xxx
# 執行當前目錄程式
gopm run
# 生成當前工程的 gopmfile 檔案用於包管理
gopm gen ‐v
# 根據當前專案 gopmfile 連結依賴並執行 go install
gopm install ‐v
# 更新當前依賴
gopm update ‐v
# 清理臨時檔案
gopm clean
# 編譯到當前目錄
gopm bin
登入後複製

5、編寫Go語言程式碼的IDE或編輯工具

5.1、基於VSCode的Go開發環境

5.1.1、安裝VSCode

VSCode 全稱是 Visual Studio Code,是微軟開發的免費開源的現代化輕現級程式碼編輯器,支援幾乎所有主流的開發語言的語法高亮、智慧程式碼補全、自定義快捷鍵、括號匹配和顏色區分、程式碼片段、程式碼對比 Diff、GIT命令 等特性,支援外掛擴充套件,並針對網頁開發和雲端應用開發做了優化。軟體跨平臺支援 Win、Mac 以及 Linux,執行流暢,可謂是微軟的良心之作。

5.1.2、安裝外掛

進入 VSCode,單擊左側的 擴充套件圖示,或者按 Ctrl+Shift+X 快捷鍵,即可開啟擴充套件管理頁面:

常用外掛列表有:

  • Bookmarks書籤
  • Bracket Pair Colorizer 2括號按層級彩色顯示
  • Chinese(Simplified) Language Pack for Visual Studio Code簡體中文語言套件
  • Go Golang 語言開發外掛
  • koroFileHeader 用於生成檔案頭、函數等的註釋,支援多種語言
  • Project Manager 專案管理外掛,可以方便的在不同的專案間切換
  • Settings Sync 設定同步外掛
  • Power Mode 超級炫酷的輸入特效外掛,給你不一樣的 Codding 體驗

安裝完 Go 外掛後,開啟一個來 go 檔案或專案,VSCode 會自動提示安裝依賴,點選「安裝」,等待安裝完成即可。如果安裝失敗,參考下面的方法。第三方工具、包的安裝,不論基於什麼IDE、編輯器,操作方法都是一致的。

啟用 go module 的,執行如下命令,手動安裝:

gopm get ‐v ‐g golang.org/x/tools
gopm get ‐v ‐g golang.org/x/lint
gopm get ‐v ‐g golang.org/x/sync
gopm get ‐u ‐v ‐g github.com/mdempsky/gocode
go install ‐v github.com/mdempsky/gocode
go get ‐u ‐v github.com/uudashr/gopkgs/cmd/gopkgs
go get ‐u ‐v github.com/ramya‐rao‐a/go‐outline
go get ‐u ‐v github.com/acroca/go‐symbols
go get ‐u ‐v golang.org/x/tools/cmd/guru
go install ‐v golang.org/x/tools/cmd/gorename
go get ‐u ‐v github.com/go‐delve/delve/cmd/dlv
go get ‐u ‐v github.com/rogpeppe/godef
gopm get ‐u ‐v ‐g github.com/sqs/goreturns
go install ‐v github.com/sqs/goreturns
go install ‐v golang.org/x/lint/golint
# gopm get ‐v ‐g ‐g golang.org/x/tools/cmd/gopls
go install ‐v golang.org/x/tools/cmd/gopls
gopm get ‐u ‐v ‐g github.com/stamblerre/gocode
go build ‐o %GOPATH%\bin\gocode‐gomod.exe github.com/stamblerre/gocode
登入後複製

5.1.3、常用設定

修改設定的方法:檔案 -> 偏好設定 -> 設定,或者快捷鍵 Ctrl+.(需要先將焦點移出編輯
器,比如關閉所有分頁,或者開啟左側的資源管理器即可)。單擊右上解的 {} ,可以開啟 settings.json 檔案,手動修改設定。

這是我在用的設定(settings.json 檔案的部分內容),在此分享給大寫。

{
	"files.autoGuessEncoding": true,
	"files.trimFinalNewlines": true,
	"files.trimTrailingWhitespace": true,
	"editor.lineNumbers": "relative", // 相對行號
	"editor.fontSize": 18,
	"editor.renderWhitespace": "all",
	"editor.renderControlCharacters": true,
	"editor.wordWrapColumn": 100,
	"editor.rulers": [
		100
	],
	"editor.wrappingIndent": "indent",
	"editor.fontLigatures": true,
	"editor.formatOnPaste": true,
	"editor.formatOnType": true,
	"editor.acceptSuggestionOnEnter": "off",
	"editor.quickSuggestions": {
	"comments": true,
	"strings": true
	},
	"editor.suggest.localityBonus": true,
	"editor.suggestSelection": "recentlyUsedByPrefix",
	"editor.formatOnSave": true,
	"editor.mouseWheelZoom": true,
	"breadcrumbs.enabled": true,
	"workbench.editor.highlightModifiedTabs": true,
	"search.showLineNumbers": true,
	"search.useIgnoreFiles": false,
	"search.followSymlinks": false,
	"debug.inlineValues": true,
	"debug.openExplorerOnEnd": true,
	"debug.allowBreakpointsEverywhere": true,
	"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",
	"git.path": "git.exe",
	"git.promptToSaveFilesBeforeCommit": true,
	"git.showPushSuccessNotification": true,
	"powermode.enabled": true,
	"powermode.enableShake": false,
	"sync.autoUpload": true,
	"go.autocompleteUnimportedPackages": true,
	"go.inferGopath": true,
	"go.useCodeSnippetsOnFunctionSuggest": true,
	"go.coverageOptions": "showCoveredCodeOnly",
	"go.gotoSymbol.includeImports": true,
	"go.useCodeSnippetsOnFunctionSuggestWithoutType": true,
	"go.buildOnSave": "off",
	"explorer.confirmDragAndDrop": false,
	"explorer.openEditors.visible": 0,
	"fileheader.configObj": {
		"createFileTime": false,
		"language": {
			"go": {
				"head": "// ",
				"middle": "// ",
				"end": "//"
			}
		},
		"autoAdd": false, // 自動新增檔案頭部註釋
		"autoAlready": true, // 僅支援的語言自動新增頭部註釋
		"headInsertLine": {
		"php": 2
		},
		"beforeAnnotation": {
			"py": "#!/usr/bin/env python\n# coding=UTF‐8",
			"go": "// Package "
		}
	},
	// 函數註釋 Ctrl+Alt+T
	"fileheader.cursorMode": {},
	// 檔案頭註釋 Ctrl+Alt+I
	"fileheader.customMade": {
		"custom_string_obkoro1": "<Copyright(C) Suzhou Keda Technology Co., Ltd. All rights reserved.>"
		"Author": "[email protected]",
		"Date": "Do not edit", // 檔案建立時間(不變)
		"LastEditors": "zhuyadong", // 檔案最後編輯者
		"LastEditTime": "Do not edit", // 檔案最後編輯時間
	}
}
登入後複製

5.2、GoLand

GoLand 是 JetBrains 公司推出的商業 Go 語言整合式開發環境(IDE)。GoLand 同樣基於 IntelliJ 平臺開發,支援 JetBrains 的外掛體系。JetBrains 還有其它眾多IDE,比如 IDEA,WebStorm,PyCharm, PHPStorm 等。

雙擊按照嚮導完成安裝即可。由於是商業IDE,只能免費試用 30 天。網上有破解方
法。如果條件允許,還是建議支援廠商購買正版。第三方工具、包的安裝,參考 VSCode 開發環境中外掛安裝一節。

5.3、Vim

Vim 又稱為神級文字編輯器,支援眾多特性,速度飛快,有很多在牛都用它寫程式碼。使用 Vim 寫 Go 程式碼,需要外掛 vim‐go ,官方地址:https://github.com/BroQiang/vim-go-ide 。

如果有 VPN,可以直接存取 golang.org 的話,執行命令:GoInstallBinaries 可以自動安裝依賴的第三方工具。詳細設定就不介紹了,對於熟悉 Vim 的同學不難,不熟悉的也沒必要浪費時間折騰,安心使用 VSCode 或 GoLand 就好了。

第三方工具、包的安裝,參考 VSCode 開發環境中外掛安裝一節。vim-go 外掛依賴的第三方包列表:

go get ‐u ‐v github.com/mdempsky/gocode
go get ‐u ‐v ‐d github.com/stamblerre/gocode
go build ‐o %GOPATH%\bin\gocode‐gomod.exe github.com/stamblerre/gocode
go get ‐u ‐v golang.org/x/tools/cmd/guru
go get ‐u ‐v golang.org/x/tools/cmd/gorename
go get ‐u ‐v github.com/go‐delve/delve/cmd/dlv
go get ‐u ‐v github.com/rogpeppe/godef
go get ‐u ‐v golang.org/x/lint/golint
go get ‐u ‐v golang.org/x/tools/gopls
go get ‐u ‐v github.com/zmb3/gogetdoc
go get ‐u ‐v github.com/davidrjenni/reftools/cmd/fillstruct
go get ‐u ‐v github.com/fatih/motion
go get ‐u ‐v github.com/kisielk/errcheck
go get ‐u ‐v github.com/josharian/impl
go get ‐u ‐v github.com/jstemmer/gotags
go get ‐u ‐v golang.org/x/tools/cmd/goimports
go get ‐u ‐v github.com/fatih/gomodifytags
go get ‐u ‐v honnef.co/go/tools/cmd/keyify
go get ‐u ‐v github.com/koron/iferr
go get ‐u ‐v github.com/klauspost/asmfmt/cmd/asmfmt
# 支援 go mod
go get ‐u ‐v github.com/golangci/golangci‐lint/cmd/golangci‐lint
# 1.不支援 go mod 2.已廢棄,vim預設使用它,可以設定為 golangci‐lint
go get ‐u ‐v github.com/alecthomas/gometalinter
登入後複製

5.4、其他Go程式碼編寫工具

除了 VSCode、GoLand 和 Vim ,還有其它一些工具可以用來寫 Go 程式碼,有興趣的可
以嘗試:

  • LiteIDE:是一款開源、跨平臺的輕量量 Go 語言整合式開發環境。
  • Eclipse:是著名的跨平臺開源整合式開發環境(IDE)。最初主要用來做Java語言開發,可以通過外掛使其支援 JavaScript、C++、Python、PHP、Go、Rust 等語言的開發。
  • Sublime:是一個程式碼編輯器,支援多種程式語言的語法亮度,擁有優秀的程式碼自動完成功能。通過外掛可以使其支援 Go 語言開發。

6、Go語言學習資料分享

最後,提供一些 Go語言的線上學習資料和網站。

一些線上學習網站:

  • 官方網站1: https://golang.org
  • 官方網站2: https://golang.google.cn 國內映象站點,
  • 官方檔案1: https://golang.org/doc
  • 官方檔案2: https://golang.google.cn/doc 國內映象站點,無需翻
  • GoDoc檔案3: https:/godoc.org
  • Go Walker: https://gowalker.org 一個可以線上生成並瀏覽 Go 專案 API 文
  • 檔的 Web 服務器
  • Go線上教學: https://tour.golang.org
  • Go語言中文網:https://studygolang.com Golang中文社群
  • Golang中國:https://www.golangtc.com Golang 中文社群
  • Go中國技術社群:https://gocn.vip Golang 中文社群

一些推薦的電子書:

  • 《The Way to Go》,作者:Ivo Balbaert;中文書名是《Go 入門指南》,翻譯:無聞,https://github.com/Unknwon/the-way-to-go_ZH_CN
  • 《Go Web程式設計》,作者:謝孟軍,https://github.com/astaxie/build-webapplication-with-golang
  • 《深入解析Go》,作者:tiancaiamao,https://github.com/tiancaiamao/go-internals

更多程式設計相關知識,請存取:!!

以上就是詳解Win系統下怎麼搭建Golang開發環境的詳細內容,更多請關注TW511.COM其它相關文章!