02-go的IDE安装

02-go的IDE安装

此篇文章是在go已经安装的前提下进行的,如果go还没有安装请参考这篇文章 01-go安装。

本文章使用的是vscode作为go IDE,所以需要提前安装好vscode,并且是在linux系统下。

当前系统为linux mint 19,ubuntu deepin等系统类似。

安装扩展插件

打开vscode编辑器,在扩展中搜索 go 关键字,不出所料应该第一个插件就是了,如图:

在这里插入图片描述
然后点击安装,安装完成之后需要安装一些go工具,主要有以下:

  • gocode
  • gopkgs
  • go-outline
  • go-symbols
  • guru
  • gorename
  • gotests
  • gomodifytags
  • impl
  • fillstruct
  • goplay
  • godoctor
  • dlv
  • gocode-gomod
  • godef
  • goreturns
  • golint

一共是17个工具。下面分别简要介绍以下这些工具是做什么用的。

工具说明连接
gocode代码自动补全连接
gopkgs自动补全未导入包连接
go-outline在当前文件中查找引用连接
go-symbols在项目路径下查找引用连接
guru查询所有引用连接
gorename重命名符号连接
gotests单元测试连接
gomodifytags修改结构体标签连接
impl新建接口连接
fillstruct结构体成员默认值连接
goplay运行当前go文件连接
godoctor重构引擎连接
dlv调试工具连接
gocode-gomodgo模块管理连接
godef跳转到声明连接
goreturns格式化代码连接
golintlint工具连接

安装go工具

在vscode中使用快捷键 Ctrl + Shift + P 调出命令界面,然后输入 go install,然后选择 Update Tools,如图:

在这里插入图片描述

紧接着会出现工具选择,一般我们全部选择,选择完成之后回车即可。

在这里插入图片描述

通过快捷键Ctrl + Tab上的那个按键调用出终端,点击输出选项,我们会看到有一些工具安装成功了,有一些安装失败了,如下:

在这里插入图片描述

我们也可以在GOPATH目录下查看已经成功安装了哪些工具:

在这里插入图片描述

如果全部成功安装会这样显示:

在这里插入图片描述

由此可见我们只成功安装了8个工具,下面我们来安装剩下的9个工具。

在项目下创建pkg/mod文件夹,然后在mod文件夹下创建 golang.org/x/,此时切换到此文件夹下,打开终端执行:

git clone https://github.com/golang/tools.git

此时x目录下会出现tools文件夹。

切换到$GOPATH目录下,打开终端输入以下命令安装,安装那些你上一步没有成功的插件。分别是:

  • go-outline,执行go install github.com/lukehoban/go-outline
  • go-symbols,执行go install github.com/newhook/go-symbols
  • gocode,执行go install github.com/mdempsky/gocode
  • godef,执行go install github.com/rogpeppe/godef
  • godoctor,执行go install github.com/godoctor/godoctor
  • gorename,执行go install golang.org/x/tools/cmd/gorename
  • gotests,执行go install github.com/cweill/gotests
  • guru,执行go install golang.org/x/tools/cmd/guru
  • impl,执行go install github.com/josharian/impl

如果golint没有安装成功,使用需要在mod目录下创建github.com目录,然后在github.com目录下打开终端执行,git clone https://github.com/golang/lint.git,最后安装 go install golang.org/x/lint/golint

为了配合新的包管理还有提高代码提示性能,建议安装下面两个工具:

  • goimports
  • gopls
go install golang.org/x/tools/cmd/goimports
go install golang.org/x/tools/cmd/gopls

这里有一个小诀窍,就是发现哪个不能下载就把这个包手动git clone到$GOPATH/pkg/mod文件夹下,然后在安装,要注意创建相应的文件夹,例如常见的github.com和golang.org/x。

调试配置

1.点击vscode的运行按钮或者快捷键Ctrl + Shift + D,在出现的页面中选择create a launch.json file,然后选择Go

在这里插入图片描述

在这里插入图片描述

此时会在项目下创建.vscode文件夹和其文件夹下的 lanuch.json 文件。

2.在lanuch.json文件中配置如下:

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Launch","type": "go","request": "launch","mode": "auto","host": "127.0.0.1","port": 2345,"program": "${fileDirname}","env": {},"args": [],"showLog": false}]
}

3.测试调试功能

在项目文件夹下创建src文件夹,用于存放代码,然后在创建一个main.go文件,内容如下:

package mainimport "fmt"func main() {fmt.Println("Hello, 世界")
}

我们在fmt.Println("Hello, 世界")这一段代码的前面打上断点,然后按F5,就会出现调试页面:

在这里插入图片描述

到了这一步你就可以调试go程序了。

调试端口是2345,要尽量比较其他程序占用此端口,否则会导致失败。

修正代码提示延迟

如果代码提示并不是很慢不需要配置,此处略过。如果出现提示很慢,甚至不提示,可以参照下面教程配置一下。

一般这种情况出现在windows下,linux基本灭有。

在vscode设置界面搜索go.useLanguageServer,然后勾选,这是会有提示是否重新加载,选择是即可。同样也可以在 setting.json 文件内追加设置

"go.useLanguageServer": true

这样做的目的是启动golsp,使得gomod下代码提示速度增强。修改后vscode需要重启。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03-go的包管理

03-go的包管理 在Go 1.11和1.12版本时就已经支持了对包管理功能,但还是相对有一些小的问题,不过在后续的版本中已经陆续解决。增加包管理是必然趋势,一门好的语言,不光要有好的生态,优美的语法,包管理也是必不可缺的功能,例如大名鼎鼎 npm,就连 C++ 也要推出包管理,好…

04-go命令使用

04-go命令使用 此篇文章是基于GO 1.14.1,如果版本相差过大,还是以版本的命令为准。 命令简介 bug—用于提交使用过程中的bug。build—用于构建二进制可执行文件。clean—用于删除在构建过程中生成的临时文件。doc—用于生成项目文档。env—查看go的环境变量。fix—把指定代…

go设计模式之代理模式

go设计模式之代理模式 代理模式的基本思想是,需要服务的代码只与代理类打交道,而实际工作的部分隐藏在代理的背后。它的主要的目的是希望隐藏实现的部分,从而消除代码的耦合。 举个例子来说就是像电脑桌面的快捷方式。电脑对某个程序提供一个快捷方式(代理对象),快捷方…

go设计模式之单例模式

在这里插入图片描述# go设计模式之单例模式 在软件开发时,经常会遇到有些对象需要保证只有一个实例的,那么这种设计模式就应用而生。 定义 单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模式的一种。在应用这个模式时,单例对象的类必须保证只有一个实例…

go设计模式之装饰器模式

go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧。 亓斌的设计模式-装饰者模式(Go语言描述)jeanphorn的Golang设计模式之装饰模式七八月份的太阳的Golang装饰器设计模式(九)我个人都不是很满意,所以才自己从头开始写关于go语…

go切片窥探

go切片窥探 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于C/C++中的数组类型,或者Python中的list类型)。这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,…

go反射机制与类型识别

go反射机制与类型识别 在写 go 程序的时候,难免会遇到使用反射机制获取一些结构体或者变量的动态类型,java 和 C# 高级编程语言提供了很好的反射机制,但是在 C 语言中基本是不存在的,C++ 需要有很多语法糖来实现反射,但是技术要求很高,go 语言虽然没有泛型,单是基本的反…

go反射实战之数组的查找Find过滤Filter函数实现

go反射实战之数组的查找过滤函数实现 在使用的go的时候,如果想要在数组中查找一个元素每次都要写一个循环来查找,过滤也是一样,没有一个能打的函数来帮助我们干这些事情,通过前面的学习,我们可以通过反射实现Find和Filter函数。 上篇文章连接 go反射机制与类型识别。 在…

go利用反射实现任意类型切片删除元素

go利用反射实现任意类型切片删除元素 在使用Go切片的时候,我们经常会需要删除切片内的元素,但是由于类型的限制,导致我们需要写很多类似的函数,那么下面我们通过go的反射机制实现一个任意类型的切片元素删除。 这里只是讲如何实现的教程,同类型还有很多函数我们可以实现…

go实现数组切片洗牌函数Shuffle

go实现数组切片洗牌函数Shuffle 在深度学习、机器学习中,我们经常会使用到一个叫 Shuffle 函数,我一般叫打乱函数,也有人叫 洗牌 函数,就是听着高级点, 它可以帮助我们打乱数据集,那么在go中我们如何实现一个呢? 大家可以直接使用我写的一个工具库 lodago,有点lodash…

go validator使用教程

go validator使用教程 很多时候在B/S开发过程中,经常会遇到对参数的校验工作,一般客户端需要提前验证一次提交的数据是否合理,以减少后端的压力,而后端是必须要对数据做验证的。 一般验证的方式大多都是if-else,这种方式会让你掉入无底的深渊,就像下面一样。 [图片来源…

DeepL与有道翻译对比

DeepL与有道翻译对比 近期有一个叫DeepL的翻译工具很火。DeepL Translator 是于2017年8月由 DeepL GmbH(一家由Linguee支持的创业公司)推出的翻译服务,支持汉语、英语、德语、法语、日语、西班牙语、意大利语、荷兰语及波兰语之间的翻译。其…

golang代理转发基础

golang代理转发基础 go标准库已经实现了一个反向代理工具,通过代理将客户端的请求转发到代理服务器。 什么是反向代理? 维基百科解释: ”In computer networks , a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or…

使用Go和WebSockets构建实时聊天服务器

使用Go和WebSockets构建实时聊天服务器 源代码连接 Go Chat 现在web应用变得越来越复杂,前端开发人员的工资也是水涨船高。现在的web程序有些是可以实时更新的,用户无需主动调用服务器或刷新浏览器。在早期,开发人员需要依靠ajax请求来创建非常接近实时的应用程序,现在他们…

如何更新Postgresql的Jsonb数组

如何更新Postgresql的Jsonb数组 假设你决定将数据以json或者jsonb的形式存储在数据库中,然后发现你刚刚给自己制造了新的问题,而这些问题是以前没有的。 jsonb是一个强大的工具,但它也有一定的代价,因为你需要调整查询和处理数据…

golang操作postgresql数据库jsonb类型

golang操作postgresql数据库jsonb类型 本文以案例为主,少言,自悟。 推荐一个测试sql的网站 SQL操作 // 创建一个带有jsonb列的表 CREATE TABLE items (id SERIAL PRIMARY KEY,attrs JSONB );// 插入一条数据 INSERT INTO items (attrs)

Angular模板高级使用

Angular模板高级使用 使用ng-template Angular自带一个叫做ng-template的组件,它允许我们声明Angular模板的任何部分。这是给我们的模板赋予动态性的一种很好的方式,让我们能够把我们的代码传递给其他组件。 在app.component.html文件中写一个ng-template组件。 <ng-t…

golang定时任务的使用

golang定时任务的使用 由于 golang 标准库内没有比较好的定时任务包,所以这里将使用一个第三方的 cron 包,由于此包存在一些不适用的地方,所以对此做了一些简单封装。 cron简介 robfig/cron是一个第三方开源的任务调度库,也就是我们平时说的定时任务。 Github官方文档安…

go之树型结构深度理解

go之树型结构深度理解 如果你是一个编程人员,或多或少对树型结构都有一定的认识,我个人对树型数据结构是又爱又恨。这篇文章主要讲解一些关于tree的数据结构以及使用。 什么是树? 数组、列表、队列、队列、堆栈都是以一个集合的形式存储数据,一般称它们被称为 "线性…

go之树型结构深度理解补充

go之树型结构深度理解补充 在上一篇中借用了 Ilija Eftimov 文章来讲解了tree的定义和一些方法。这篇文章主要是讲解在树型结构中如何判断节点与节点之间的关系。 A节点是否是B节点的直接上级A节点是否是B节点的可跳跃的上级(即中间隔开几个节点的间接上级)上一篇文章连接 g…