十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
今天小编给大家分享一下Windows系统中如何搭建Go语言开发环境的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
成都创新互联专注于邯山企业网站建设,自适应网站建设,商城网站定制开发。邯山网站建设公司,为邯山等地区提供建站服务。全流程按需策划设计,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
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
VSCode 全称是 Visual Studio Code,是微软开发的免费开源的现代化轻现级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段、代码对比 Diff、GIT命令 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux,运行流畅,可谓是微软的良心之作。
进入 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
修改配置的方法:文件 -> 首选项 -> 设置,或者快捷键 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": "" "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 天。网上有破解方
法。如果条件允许,还是建议支持厂商购买正版。第三方工具、包的安装。
Vim 又称为神级文本编辑器,支持众多特性,速度飞快,有很多在牛都用它写代码。使用 Vim 写 Go 代码,需要插件 vim‐go 。
如果有 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
除了 VSCode、GoLand 和 Vim ,还有其它一些工具可以用来写 Go 代码,有兴趣的可
以尝试:
LiteIDE:是一款开源、跨平台的轻量量 Go 语言集成开发环境。
Eclipse:是著名的跨平台开源集成开发环境(IDE)。最初主要用来做Java语言开发,可以通过插件使其支持 JavaScript、C++、Python、PHP、Go、Rust 等语言的开发。
Sublime:是一个代码编辑器,支持多种编程语言的语法亮度,拥有优秀的代码自动完成功能。通过插件可以使其支持 Go 语言开发。
以上就是“Windows系统中如何搭建Go语言开发环境”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注创新互联行业资讯频道。