溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Windows系統(tǒng)中如何搭建Go語言開發(fā)環(huán)境

發(fā)布時間:2022-10-26 09:31:28 來源:億速云 閱讀:167 作者:iii 欄目:系統(tǒng)運維

今天小編給大家分享一下Windows系統(tǒng)中如何搭建Go語言開發(fā)環(huán)境的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    1、Go語言簡介

           Go語言(又稱Golang),起源于2007年,并在2009年由Google正式對外發(fā)布。Go語言是一種靜態(tài)強類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言,它的主要目標是“兼具 Python 等動態(tài)語言的開發(fā)速度和 C/C++ 等編譯型語言的性能與安全性”。Go語言目前可以達到C/C++ 80%的運行性能,其編譯速度遠快于Java和C/C++。

    與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能,但增加了 切片(Slice) 型、并發(fā)、管道、垃圾回收、接口(Interface)等特性的語言級支持。Go 2.0版本將支持泛型,對于斷言的存在,則持負面態(tài)度,同時也為自己不提供類型繼承來辯護。

           Go語言是編程語言設計的又一次嘗試,是對類C語言的重大改進,它不但能讓你訪問底層操作系統(tǒng),還提供了強大的網(wǎng)絡編程和并發(fā)編程支持。Go語言的用途眾多,可以進行網(wǎng)絡編程、系統(tǒng)編程、并發(fā)編程、分布式編程。

           GO語言有如下特性:

    • 靜態(tài)編譯

    • 垃圾回收

    • 簡潔的符號和語法

    • 平坦的類型系統(tǒng)

    • 基于CSP的并發(fā)模型。

    • 高效簡單的工具鏈。

    • 豐富的標準庫

           Go語言的推出,旨在不損失應用程序性能的情況下降低代碼的復雜性,具有“部署簡單、并發(fā)性好、語言設計良好、執(zhí)行性能好”等優(yōu)勢,目前國內(nèi)諸多 IT 公司均已采用Go語言開發(fā)項目,特別是在大型互聯(lián)網(wǎng)公司有著廣泛的應用。

           很多重要的開源項目都是使用Go語言開發(fā)的:

    1)Docker:火熱的容?化技術(shù)
    2)Kubernetes:Goole Borg 的開源實現(xiàn)
    3)LXD:另一個容?化技術(shù),其定位是系統(tǒng)容?,直接對標虛擬機。
    4)Etcd:類似 zookeeper 的高可用 key-value 存儲
    5)TIDB:國人開發(fā)的 Goole spanner 的開源實現(xiàn)。定位于在線事務處理/在線分析處理( HTAP: Hybrid Transactional/Analytical Processing)的融合型數(shù)據(jù)庫產(chǎn)品,實現(xiàn)了一鍵水平伸縮,強一致性的多副本數(shù)據(jù)安全,分布式事務,實時OLAP 等重要特性。同時兼容 MySQL 協(xié)議和生態(tài),遷移便捷,運維成本極低。

    2、安裝Git

           Go語言開發(fā)過程中用到的第三方包,需要使用 git 下載,因此 git 是必不可少的。

           假設安裝路徑為 C:\Program Files\Git,需要將以下路徑添加到環(huán)境變量 PATH:

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

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

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

           先到GO語言官網(wǎng) Downloads - The Go Programming Language 下載最新版本的GO語言安裝包,雙擊按照向?qū)瓿砂惭b:

    Windows系統(tǒng)中如何搭建Go語言開發(fā)環(huán)境

          Golang開發(fā)環(huán)境涉及到幾個環(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

    3.1、環(huán)境變量GOROOT

           GOROOT其實就是Golang的安裝目錄。新版本的GOROOT已經(jīng)不需要設置了。Golang編譯器安裝后,會自動把%GOROOT%\bin目錄添加到環(huán)境變量PATH。

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

    λ go version
    2 go version go1.19.2 windows/amd64

    3.2、環(huán)境變量GOPATH

           可以把GOPATH指向的目錄,理解為工作目錄,其作用是告訴Go命令和其它相關(guān)工具,在哪里找系統(tǒng)上安裝的Go包。

           GOPATH可以指向多個路徑,與其它環(huán)境變量的設置一樣,用相同的分割符分割。windiows 系統(tǒng)分割符是 ; ,linux 系統(tǒng)分割符是 : 。

           默認的GOPATH是%USERPROFILE%\go\bin。在沒有Go Modules之前,通常都需要修改GOPATH的值。GOPATH 的目錄結(jié)構(gòu),是約定好的,不可修改:

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

    3.3、Go常用命令

           go build 在源代碼目錄執(zhí)行該命令,編譯該目錄下的源代碼,生成可執(zhí)行程序或庫。

           go install 除了編譯,還進行安裝(將生成的結(jié)果拷貝到指定目錄)??蓤?zhí)行程序拷貝到 %GOPATH%\bin,庫拷貝到 %GOPATH%\pkg。

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

    4、包管理

           由于國內(nèi)眾所周知的網(wǎng)絡原因,不能直接訪問 golang 的官方網(wǎng)站,由此導致不能自動安裝依賴項,這也是搭建 Go 開發(fā)環(huán)境最麻煩的地方。為解決網(wǎng)絡問題,有以下幾種方法:

    1)方法1:找一個可用的 VPN。
    2)方法2:安裝失敗后,查看日志,到 github.com 上查找對應的庫,下載到本機的對應位置,再執(zhí)行 go install 進行安裝。
    3)方法3:使用 gopm 包管理工具,后面詳解。
    4)方法4:啟用 Go Modules,并設置 GOPROXY 使用代理。

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

    4.1、go module

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

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

            為了保持與兼容,環(huán)境變量如下設置:

    GOROOT : 不需要設置,設置了也沒關(guān)系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 命令行將會根據(jù)當前目錄來決定是否啟用 module 功能。這種情況下可以分為兩種情形:當前目錄在 GOPATH/src 之外,且該目錄包含go.mod 文件,或者該目錄是包含 go.mod 文件的目錄的子目錄。

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

    4.2、gopm

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

    無需 Git 和 Hg 等版本管理工具,就可以下載指定版本的 Go 語言包可以解決翻墻問題,在國內(nèi)有加速效果只能下載依賴的包的源碼,不能編譯安裝

           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
    # 根據(jù)當前項目 gopmfile 鏈接依賴并執(zhí)行 go install
    gopm install ‐v
    # 更新當前依賴
    gopm update ‐v
    # 清理臨時文件
    gopm clean
    # 編譯到當前目錄
    gopm bin

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

    5.1、基于VSCode的Go開發(fā)環(huán)境

    5.1.1、安裝VSCode

           VSCode 全稱是 Visual Studio Code,是微軟開發(fā)的免費開源的現(xiàn)代化輕現(xiàn)級代碼編輯器,支持幾乎所有主流的開發(fā)語言的語法高亮、智能代碼補全、自定義快捷鍵、括號匹配和顏色區(qū)分、代碼片段、代碼對比 Diff、GIT命令 等特性,支持插件擴展,并針對網(wǎng)頁開發(fā)和云端應用開發(fā)做了優(yōu)化。軟件跨平臺支持 Win、Mac 以及 Linux,運行流暢,可謂是微軟的良心之作。

    5.1.2、安裝插件

           進入 VSCode,單擊左側(cè)的 擴展圖標,或者按 Ctrl+Shift+X 快捷鍵,即可打開擴展管理頁面:

    Windows系統(tǒng)中如何搭建Go語言開發(fā)環(huán)境

    常用插件列表有:

    • Bookmarks書簽

    • Bracket Pair Colorizer 2括號按層級彩色顯示

    • Chinese(Simplified) Language Pack for Visual Studio Code簡體中文語言包

    • Go Golang 語言開發(fā)插件

    • koroFileHeader 用于生成文件頭、函數(shù)等的注釋,支持多種語言

    • Project Manager 項目管理插件,可以方便的在不同的項目間切換

    • Settings Sync 配置同步插件

    • Power Mode 超級炫酷的輸入特效插件,給你不一樣的 Codding 體驗

           安裝完 Go 插件后,打開一個來 go 文件或項目,VSCode 會自動提示安裝依賴,點擊“安裝”,等待安裝完成即可。如果安裝失敗,參考下面的方法。第三方工具、包的安裝,不論基于什么IDE、編輯?,操作方法都是一致的。

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

    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+.(需要先將焦點移出編輯
    ?,比如關(guān)閉所有標簽頁,或者打開左側(cè)的資源管理?即可)。單擊右上解的 {} ,可以打開 settings.json 文件,手動修改配置。

           這是我在用的配置(settings.json 文件的部分內(nèi)容),在此分享給大寫。

    {
    	"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 "
    		}
    	},
    	// 函數(shù)注釋 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", // 文件創(chuàng)建時間(不變)
    		"LastEditors": "zhuyadong", // 文件最后編輯者
    		"LastEditTime": "Do not edit", // 文件最后編輯時間
    	}
    }

    5.2、GoLand

           GoLand 是 JetBrains 公司推出的商業(yè) Go 語言集成開發(fā)環(huán)境(IDE)。GoLand 同樣基于 IntelliJ 平臺開發(fā),支持 JetBrains 的插件體系。JetBrains 還有其它眾多IDE,比如 IDEA,WebStorm,PyCharm, PHPStorm 等。

           雙擊按照向?qū)瓿砂惭b即可。由于是商業(yè)IDE,只能免費試用 30 天。網(wǎng)上有破解方
    法。如果條件允許,還是建議支持廠商購買正版。第三方工具、包的安裝。

    5.3、Vim

           Vim 又稱為神級文本編輯?,支持眾多特性,速度飛快,有很多在牛都用它寫代碼。使用 Vim 寫 Go 代碼,需要插件 vim‐go  。

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

          第三方工具、包的安裝,參考 VSCode 開發(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默認使用它,可以配置為 golangci‐lint
    go get ‐u ‐v github.com/alecthomas/gometalinter

    5.4、其他Go代碼編寫工具

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

    • LiteIDE:是一款開源、跨平臺的輕量量 Go 語言集成開發(fā)環(huán)境。

    • Eclipse:是著名的跨平臺開源集成開發(fā)環(huán)境(IDE)。最初主要用來做Java語言開發(fā),可以通過插件使其支持 JavaScript、C++、Python、PHP、Go、Rust 等語言的開發(fā)。

    • Sublime:是一個代碼編輯?,支持多種編程語言的語法亮度,擁有優(yōu)秀的代碼自動完成功能。通過插件可以使其支持 Go 語言開發(fā)。

    以上就是“Windows系統(tǒng)中如何搭建Go語言開發(fā)環(huán)境”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI