您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“windows系統下如何搭建Golang開發環境”,內容詳細,步驟清晰,細節處理妥當,希望這篇“windows系統下如何搭建Golang開發環境”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
Go語言(又稱Golang),起源于2007年,并在2009年由Google正式對外發布。Go語言是一種靜態強類型、編譯型、并發型,并具有垃圾回收功能的編程語言,它的主要目標是“兼具 Python 等動態語言的開發速度和 C/C++ 等編譯型語言的性能與安全性”。Go語言目前可以達到C/C++ 80%的運行性能,其編譯速度遠快于Java和C/C++。
與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 協議和生態,遷移便捷,運維成本極低。
Go語言開發過程中用到的第三方包,需要使用 git 下載,因此 git 是必不可少的。
假設安裝路徑為 C:\Program Files\Git,需要將以下路徑添加到環境變量 PATH:
C:\Program Files\Git\bin
C:\Program Files\Git\cmd
這個地方初學者需要注意一下,Git默認是采用命令行手動輸入命令去操作的。還可以像SVN那樣通過UI界面去做操作,只要下載TortoiseGit就好了。
先到GO語言官網 Downloads - The Go Programming Language 下載最新版本的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
GOROOT其實就是Golang的安裝目錄。新版本的GOROOT已經不需要設置了。Golang編譯器安裝后,會自動把%GOROOT%\bin目錄添加到環境變量PATH。
如下所示,這是我電腦上安裝完 Golang 后,在命令行中輸出的Go版本:
λ go version
2 go version go1.19.2 windows/amd64
可以把GOPATH指向的目錄,理解為工作目錄,其作用是告訴Go命令和其它相關工具,在哪里找系統上安裝的Go包。
GOPATH可以指向多個路徑,與其它環境變量的設置一樣,用相同的分割符分割。windiows 系統分割符是 ; ,linux 系統分割符是 : 。
默認的GOPATH是%USERPROFILE%\go\bin。在沒有Go Modules之前,通常都需要修改GOPATH的值。GOPATH 的目錄結構,是約定好的,不可修改:
GOPATH
├─bin 存放安裝的第三方工具
├─pkg 存放編譯的第三方庫
└─src 源碼目錄
├─demo 這是你自已的項目源代碼,每個項目一個目錄
└─github.com 這是從 github.com 下載的第三庫、工具的源代碼
go build 在源代碼目錄執行該命令,編譯該目錄下的源代碼,生成可執行程序或庫。
go install 除了編譯,還進行安裝(將生成的結果拷貝到指定目錄)。可執行程序拷貝到 %GOPATH%\bin,庫拷貝到 %GOPATH%\pkg。
go get 從遠程倉庫獲取代碼,同時進行編譯和安裝。
由于國內眾所周知的網絡原因,不能直接訪問 golang 的官方網站,由此導致不能自動安裝依賴項,這也是搭建 Go 開發環境最麻煩的地方。為解決網絡問題,有以下幾種方法:
1)方法1:找一個可用的 VPN。
2)方法2:安裝失敗后,查看日志,到 github.com 上查找對應的庫,下載到本機的對應位置,再執行 go install 進行安裝。
3)方法3:使用 gopm 包管理工具,后面詳解。
4)方法4:啟用 Go Modules,并設置 GOPROXY 使用代理。
這里提供手動安裝依賴的方法,只需要安裝一次,其它各種開發環境都可以共享使用。
自從 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 。設置代理,啟用模塊后,用于下載需要翻墻才能訪問的包。
這樣設置的好處是,當項目源代碼在 %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 即可正常安裝第三方工具包。
gopm 是 Go 的一個包管理工具,有如下特性:
無需 Git 和 Hg 等版本管理工具,就可以下載指定版本的 Go 語言包
可以解決翻墻問題,在國內有加速效果
只能下載依賴的包的源碼,不能編譯安裝
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.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": "zhuyadong@kedacom.com",
"Date": "Do not edit", // 文件創建時間(不變)
"LastEditors": "zhuyadong", // 文件最后編輯者
"LastEditTime": "Do not edit", // 文件最后編輯時間
}
}
GoLand 是 JetBrains 公司推出的商業 Go 語言集成開發環境(IDE)。GoLand 同樣基于 IntelliJ 平臺開發,支持 JetBrains 的插件體系。JetBrains 還有其它眾多IDE,比如 IDEA,WebStorm,PyCharm, PHPStorm 等。
雙擊按照向導完成安裝即可。由于是商業IDE,只能免費試用 30 天。網上有破解方
法。如果條件允許,還是建議支持廠商購買正版。第三方工具、包的安裝,參考 VSCode 開發環境中插件安裝一節。
Vim 又稱為神級文本編輯?,支持眾多特性,速度飛快,有很多在牛都用它寫代碼。使用 Vim 寫 Go 代碼,需要插件 vim‐go 。
如果有 VPN,可以直接訪問 golang.org 的話,執行命令:GoInstallBinaries 可以自動安裝依賴的第三方工具。詳細配置就不介紹了,對于熟悉 Vim 的同學不難,不熟悉的也沒必要浪費時間折騰,安心使用 VSCode 或 GoLand 就好了。
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
除了 VSCode、GoLand 和 Vim ,還有其它一些工具可以用來寫 Go 代碼,有興趣的可
以嘗試:
LiteIDE:是一款開源、跨平臺的輕量量 Go 語言集成開發環境。
Eclipse:是著名的跨平臺開源集成開發環境(IDE)。最初主要用來做Java語言開發,可以通過插件使其支持 JavaScript、C++、Python、PHP、Go、Rust 等語言的開發。
Sublime:是一個代碼編輯?,支持多種編程語言的語法亮度,擁有優秀的代碼自動完成功能。通過插件可以使其支持 Go 語言開發。
讀到這里,這篇“windows系統下如何搭建Golang開發環境”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。