今天小編給大家分享一下Windows系統(tǒng)中如何搭建Go語(yǔ)言開(kāi)發(fā)環(huán)境的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
成都創(chuàng)新互聯(lián)專注于邯山企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站定制開(kāi)發(fā)。邯山網(wǎng)站建設(shè)公司,為邯山等地區(qū)提供建站服務(wù)。全流程按需策劃設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
Go語(yǔ)言(又稱Golang),起源于2007年,并在2009年由Google正式對(duì)外發(fā)布。Go語(yǔ)言是一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語(yǔ)言,它的主要目標(biāo)是“兼具 Python 等動(dòng)態(tài)語(yǔ)言的開(kāi)發(fā)速度和 C/C++ 等編譯型語(yǔ)言的性能與安全性”。Go語(yǔ)言目前可以達(dá)到C/C++ 80%的運(yùn)行性能,其編譯速度遠(yuǎn)快于Java和C/C++。
與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能,但增加了 切片(Slice) 型、并發(fā)、管道、垃圾回收、接口(Interface)等特性的語(yǔ)言級(jí)支持。Go 2.0版本將支持泛型,對(duì)于斷言的存在,則持負(fù)面態(tài)度,同時(shí)也為自己不提供類型繼承來(lái)辯護(hù)。
Go語(yǔ)言是編程語(yǔ)言設(shè)計(jì)的又一次嘗試,是對(duì)類C語(yǔ)言的重大改進(jìn),它不但能讓你訪問(wèn)底層操作系統(tǒng),還提供了強(qiáng)大的網(wǎng)絡(luò)編程和并發(fā)編程支持。Go語(yǔ)言的用途眾多,可以進(jìn)行網(wǎng)絡(luò)編程、系統(tǒng)編程、并發(fā)編程、分布式編程。
GO語(yǔ)言有如下特性:
靜態(tài)編譯
垃圾回收
簡(jiǎn)潔的符號(hào)和語(yǔ)法
平坦的類型系統(tǒng)
基于CSP的并發(fā)模型。
高效簡(jiǎn)單的工具鏈。
豐富的標(biāo)準(zhǔn)庫(kù)
Go語(yǔ)言的推出,旨在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,具有“部署簡(jiǎn)單、并發(fā)性好、語(yǔ)言設(shè)計(jì)良好、執(zhí)行性能好”等優(yōu)勢(shì),目前國(guó)內(nèi)諸多 IT 公司均已采用Go語(yǔ)言開(kāi)發(fā)項(xiàng)目,特別是在大型互聯(lián)網(wǎng)公司有著廣泛的應(yīng)用。
很多重要的開(kāi)源項(xiàng)目都是使用Go語(yǔ)言開(kāi)發(fā)的:
1)Docker:火熱的容?化技術(shù)
2)Kubernetes:Goole Borg 的開(kāi)源實(shí)現(xiàn)
3)LXD:另一個(gè)容?化技術(shù),其定位是系統(tǒng)容?,直接對(duì)標(biāo)虛擬機(jī)。
4)Etcd:類似 zookeeper 的高可用 key-value 存儲(chǔ)
5)TIDB:國(guó)人開(kāi)發(fā)的 Goole spanner 的開(kāi)源實(shí)現(xiàn)。定位于在線事務(wù)處理/在線分析處理( HTAP: Hybrid Transactional/Analytical Processing)的融合型數(shù)據(jù)庫(kù)產(chǎn)品,實(shí)現(xiàn)了一鍵水平伸縮,強(qiáng)一致性的多副本數(shù)據(jù)安全,分布式事務(wù),實(shí)時(shí)OLAP 等重要特性。同時(shí)兼容 MySQL 協(xié)議和生態(tài),遷移便捷,運(yùn)維成本極低。
Go語(yǔ)言開(kāi)發(fā)過(guò)程中用到的第三方包,需要使用 git 下載,因此 git 是必不可少的。
假設(shè)安裝路徑為 C:\Program Files\Git,需要將以下路徑添加到環(huán)境變量 PATH:
C:\Program Files\Git\bin
C:\Program Files\Git\cmd
這個(gè)地方初學(xué)者需要注意一下,Git默認(rèn)是采用命令行手動(dòng)輸入命令去操作的。還可以像SVN那樣通過(guò)UI界面去做操作,只要下載TortoiseGit就好了。
先到GO語(yǔ)言官網(wǎng) Downloads - The Go Programming Language 下載最新版本的GO語(yǔ)言安裝包,雙擊按照向?qū)瓿砂惭b:
Golang開(kāi)發(fā)環(huán)境涉及到幾個(gè)環(huán)境變量,比較重要的是:GOROOT,GOPATH。使用go env命令就可以查看 Go 的環(huán)境變量,不帶參數(shù)打印所有環(huán)境變量:
λ 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其實(shí)就是Golang的安裝目錄。新版本的GOROOT已經(jīng)不需要設(shè)置了。Golang編譯器安裝后,會(huì)自動(dòng)把%GOROOT%\bin目錄添加到環(huán)境變量PATH。
如下所示,這是我電腦上安裝完 Golang 后,在命令行中輸出的Go版本:
λ go version 2 go version go1.19.2 windows/amd64
可以把GOPATH指向的目錄,理解為工作目錄,其作用是告訴Go命令和其它相關(guān)工具,在哪里找系統(tǒng)上安裝的Go包。
GOPATH可以指向多個(gè)路徑,與其它環(huán)境變量的設(shè)置一樣,用相同的分割符分割。windiows 系統(tǒng)分割符是 ; ,linux 系統(tǒng)分割符是 : 。
默認(rèn)的GOPATH是%USERPROFILE%\go\bin。在沒(méi)有Go Modules之前,通常都需要修改GOPATH的值。GOPATH 的目錄結(jié)構(gòu),是約定好的,不可修改:
GOPATH
├─bin 存放安裝的第三方工具
├─pkg 存放編譯的第三方庫(kù)
└─src 源碼目錄
├─demo 這是你自已的項(xiàng)目源代碼,每個(gè)項(xiàng)目一個(gè)目錄
└─github.com 這是從 github.com 下載的第三庫(kù)、工具的源代碼
go build 在源代碼目錄執(zhí)行該命令,編譯該目錄下的源代碼,生成可執(zhí)行程序或庫(kù)。
go install 除了編譯,還進(jìn)行安裝(將生成的結(jié)果拷貝到指定目錄)??蓤?zhí)行程序拷貝到 %GOPATH%\bin,庫(kù)拷貝到 %GOPATH%\pkg。
go get 從遠(yuǎn)程倉(cāng)庫(kù)獲取代碼,同時(shí)進(jìn)行編譯和安裝。
由于國(guó)內(nèi)眾所周知的網(wǎng)絡(luò)原因,不能直接訪問(wèn) golang 的官方網(wǎng)站,由此導(dǎo)致不能自動(dòng)安裝依賴項(xiàng),這也是搭建 Go 開(kāi)發(fā)環(huán)境最麻煩的地方。為解決網(wǎng)絡(luò)問(wèn)題,有以下幾種方法:
1)方法1:找一個(gè)可用的 VPN。
2)方法2:安裝失敗后,查看日志,到 github.com 上查找對(duì)應(yīng)的庫(kù),下載到本機(jī)的對(duì)應(yīng)位置,再執(zhí)行 go install 進(jìn)行安裝。
3)方法3:使用 gopm 包管理工具,后面詳解。
4)方法4:?jiǎn)⒂?Go Modules,并設(shè)置 GOPROXY 使用代理。
這里提供手動(dòng)安裝依賴的方法,只需要安裝一次,其它各種開(kāi)發(fā)環(huán)境都可以共享使用。
自從 Go 官方推出 v1.11 之后,增加新的依賴管理模塊并且更加易于管理項(xiàng)目中所需要的模塊。模塊是存儲(chǔ)在文件樹(shù)中的 Go 包的集合,其根目錄中包含 go.mod 文件。 go.mod 文件定義了模塊的路徑,它也是用于根目錄的導(dǎo)入路徑,以及它的依賴性要求。每個(gè)依賴性要求都被寫(xiě)為模塊路徑和特定語(yǔ)義版本。
從 Go 1.11 開(kāi)始,Go 允許在 $GOPATH/src 外的任何目錄下使用 go.mod 創(chuàng)建項(xiàng)目。在 $GOPATH/src 中,為了兼容性,Go 命令仍然在舊的 GOPATH 模式下運(yùn)行。當(dāng) module 功能啟用時(shí), GOPATH 在項(xiàng)目構(gòu)建過(guò)程中不再擔(dān)當(dāng) import 的角色,但它仍然存儲(chǔ)下載的依賴包,具體位置在 $GOPATH/pkg/mod 。
為了保持與兼容,環(huán)境變量如下設(shè)置:
GOROOT: 不需要設(shè)置,設(shè)置了也沒(méi)關(guān)系GOPATH: 保持默認(rèn)。設(shè)置其它目錄也可以,但 項(xiàng)目代碼 不能放在%GOPATH%\src 目錄下,否則 go module 需要明確啟用GO111MODULE: 保持默認(rèn)。GOPROXY: 值為 https://goproxy.io 。設(shè)置代理,啟用模塊后,用于下載需要翻墻才能訪問(wèn)的包。
這樣設(shè)置的好處是,當(dāng)項(xiàng)目源代碼在 %GOPATH%\src 目錄下時(shí),使用舊版本的模式查
找第三方工具、包;當(dāng)項(xiàng)目源代碼不在 %GOPATH%\src 目錄下,并且其父路徑上的任
何一個(gè)目錄有 go.mod 文件,就自動(dòng)啟用 go module。
GO111MODULE 有以下幾種值:
off:go 命令行將不會(huì)支持 module 功能,尋找依賴包的方式將會(huì)沿用舊版本那種通過(guò) vendor 目錄或者 GOPATH 模式來(lái)查找。on:go命令行會(huì)使用 modules,而一點(diǎn)也不會(huì)去 GOPATH 目錄下查找。auto:默認(rèn)值,go 命令行將會(huì)根據(jù)當(dāng)前目錄來(lái)決定是否啟用 module 功能。這種情況下可以分為兩種情形:當(dāng)前目錄在 GOPATH/src 之外,且該目錄包含go.mod 文件,或者該目錄是包含 go.mod 文件的目錄的子目錄。
打開(kāi)命令行,保證當(dāng)前目錄不是 %GOPATH% 及其子目錄,執(zhí)行 go get 即可正常安裝第三方工具包。
gopm 是 Go 的一個(gè)包管理工具,有如下特性:
無(wú)需 Git 和 Hg 等版本管理工具,就可以下載指定版本的 Go 語(yǔ)言包可以解決翻墻問(wèn)題,在國(guó)內(nèi)有加速效果只能下載依賴的包的源碼,不能編譯安裝
gopm基本用法:
# 查看當(dāng)前工程依賴 gopm list # 顯示依賴詳細(xì)信息 gopm list ‐v # 列出文件依賴 gopm list ‐t [file] # 拉取依賴到緩存目錄 gopm get ‐r xxx # 僅下載當(dāng)前指定的包 gopm get ‐d xxx # 拉取依賴到 $GOPATH gopm get ‐g xxx # 檢查更新所有包 gopm get ‐u xxx # 拉取到當(dāng)前所在目錄 gopm get ‐l xxx # 運(yùn)行當(dāng)前目錄程序 gopm run # 生成當(dāng)前工程的 gopmfile 文件用于包管理 gopm gen ‐v # 根據(jù)當(dāng)前項(xiàng)目 gopmfile 鏈接依賴并執(zhí)行 go install gopm install ‐v # 更新當(dāng)前依賴 gopm update ‐v # 清理臨時(shí)文件 gopm clean # 編譯到當(dāng)前目錄 gopm bin
VSCode 全稱是 Visual Studio Code,是微軟開(kāi)發(fā)的免費(fèi)開(kāi)源的現(xiàn)代化輕現(xiàn)級(jí)代碼編輯器,支持幾乎所有主流的開(kāi)發(fā)語(yǔ)言的語(yǔ)法高亮、智能代碼補(bǔ)全、自定義快捷鍵、括號(hào)匹配和顏色區(qū)分、代碼片段、代碼對(duì)比 Diff、GIT命令 等特性,支持插件擴(kuò)展,并針對(duì)網(wǎng)頁(yè)開(kāi)發(fā)和云端應(yīng)用開(kāi)發(fā)做了優(yōu)化。軟件跨平臺(tái)支持 Win、Mac 以及 Linux,運(yùn)行流暢,可謂是微軟的良心之作。
進(jìn)入 VSCode,單擊左側(cè)的 擴(kuò)展圖標(biāo),或者按 Ctrl+Shift+X 快捷鍵,即可打開(kāi)擴(kuò)展管理頁(yè)面:
常用插件列表有:
Bookmarks書(shū)簽
Bracket Pair Colorizer 2括號(hào)按層級(jí)彩色顯示
Chinese(Simplified) Language Pack for Visual Studio Code簡(jiǎn)體中文語(yǔ)言包
Go Golang 語(yǔ)言開(kāi)發(fā)插件
koroFileHeader 用于生成文件頭、函數(shù)等的注釋,支持多種語(yǔ)言
Project Manager 項(xiàng)目管理插件,可以方便的在不同的項(xiàng)目間切換
Settings Sync 配置同步插件
Power Mode 超級(jí)炫酷的輸入特效插件,給你不一樣的 Codding 體驗(yàn)
安裝完 Go 插件后,打開(kāi)一個(gè)來(lái) go 文件或項(xiàng)目,VSCode 會(huì)自動(dòng)提示安裝依賴,點(diǎn)擊“安裝”,等待安裝完成即可。如果安裝失敗,參考下面的方法。第三方工具、包的安裝,不論基于什么IDE、編輯?,操作方法都是一致的。
啟用 go module 的,執(zhí)行如下命令,手動(dòng)安裝:
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
修改配置的方法:文件 -> 首選項(xiàng) -> 設(shè)置,或者快捷鍵 Ctrl+.(需要先將焦點(diǎn)移出編輯
?,比如關(guān)閉所有標(biāo)簽頁(yè),或者打開(kāi)左側(cè)的資源管理?即可)。單擊右上解的 {} ,可以打開(kāi) settings.json 文件,手動(dòng)修改配置。
這是我在用的配置(settings.json 文件的部分內(nèi)容),在此分享給大寫(xiě)。
{ "files.autoGuessEncoding": true, "files.trimFinalNewlines": true, "files.trimTrailingWhitespace": true, "editor.lineNumbers": "relative", // 相對(duì)行號(hào) "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": "http:// ", "middle": "http:// ", "end": "http://" } }, "autoAdd": false, // 自動(dòng)添加文件頭部注釋 "autoAlready": true, // 僅支持的語(yǔ)言自動(dòng)添加頭部注釋 "headInsertLine": { "php": 2 }, "beforeAnnotation": { "py": "#!/usr/bin/env python\n# coding=UTF‐8", "go": "http:// Package " } }, // 函數(shù)注釋 Ctrl+Alt+T "fileheader.cursorMode": {}, // 文件頭注釋 Ctrl+Alt+I "fileheader.customMade": { "custom_string_obkoro1": "" "Author": "zhuyadong@kedacom.com", "Date": "Do not edit", // 文件創(chuàng)建時(shí)間(不變) "LastEditors": "zhuyadong", // 文件最后編輯者 "LastEditTime": "Do not edit", // 文件最后編輯時(shí)間 } }
GoLand 是 JetBrains 公司推出的商業(yè) Go 語(yǔ)言集成開(kāi)發(fā)環(huán)境(IDE)。GoLand 同樣基于 IntelliJ 平臺(tái)開(kāi)發(fā),支持 JetBrains 的插件體系。JetBrains 還有其它眾多IDE,比如 IDEA,WebStorm,PyCharm, PHPStorm 等。
雙擊按照向?qū)瓿砂惭b即可。由于是商業(yè)IDE,只能免費(fèi)試用 30 天。網(wǎng)上有破解方
法。如果條件允許,還是建議支持廠商購(gòu)買正版。第三方工具、包的安裝。
Vim 又稱為神級(jí)文本編輯?,支持眾多特性,速度飛快,有很多在牛都用它寫(xiě)代碼。使用 Vim 寫(xiě) Go 代碼,需要插件 vim‐go 。
如果有 VPN,可以直接訪問(wèn) golang.org 的話,執(zhí)行命令:GoInstallBinaries 可以自動(dòng)安裝依賴的第三方工具。詳細(xì)配置就不介紹了,對(duì)于熟悉 Vim 的同學(xué)不難,不熟悉的也沒(méi)必要浪費(fèi)時(shí)間折騰,安心使用 VSCode 或 GoLand 就好了。
第三方工具、包的安裝,參考 VSCode 開(kāi)發(fā)環(huán)境中插件安裝一節(jié)。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默認(rèn)使用它,可以配置為 golangci‐lint go get ‐u ‐v github.com/alecthomas/gometalinter
除了 VSCode、GoLand 和 Vim ,還有其它一些工具可以用來(lái)寫(xiě) Go 代碼,有興趣的可
以嘗試:
LiteIDE:是一款開(kāi)源、跨平臺(tái)的輕量量 Go 語(yǔ)言集成開(kāi)發(fā)環(huán)境。
Eclipse:是著名的跨平臺(tái)開(kāi)源集成開(kāi)發(fā)環(huán)境(IDE)。最初主要用來(lái)做Java語(yǔ)言開(kāi)發(fā),可以通過(guò)插件使其支持 JavaScript、C++、Python、PHP、Go、Rust 等語(yǔ)言的開(kāi)發(fā)。
Sublime:是一個(gè)代碼編輯?,支持多種編程語(yǔ)言的語(yǔ)法亮度,擁有優(yōu)秀的代碼自動(dòng)完成功能。通過(guò)插件可以使其支持 Go 語(yǔ)言開(kāi)發(fā)。
以上就是“Windows系統(tǒng)中如何搭建Go語(yǔ)言開(kāi)發(fā)環(huán)境”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。