Go更好的开发环境Visual Studio Code

Stella981
• 阅读 1094

Go更好的开发环境Visual Studio Code

一直以来Go的IDE并没有合适的选择.曾经试过liteide,但是不合口味,一直以来就用Sublime+Gosublime+Godef来作为环境,但是因为Sublime对显示的支持等因素.用起来不算很舒服.
最近看到Visual Studio Code对Go的支持,简直耳目一新.而且因为Visual Studio Code对跨平台的支持,感觉 简直 完美.
当然这些功能通过Sublime加插件的方式也能基本实现,但是两者带来的体验嘛,不可同日而语.

Visual Studio Code

Visual Studio Code:下载地址

Go for Visual Studio Code支持特性

  • 代码高亮

  • 自动完成列表(使用gocode)

  • 代码片段

  • 快速提示函数定义(使用godef)

  • 跳转定义(使用godef)

  • 查找引用(使用go-find-references)

  • 代码大纲(使用go-outline)

  • 重命名(使用gorename)

  • 保存时编译

  • 代码格式化

  • Imports管理

  • 调试(使用delve )

功能展示

IDE特性

Go更好的开发环境Visual Studio Code

调试

Go更好的开发环境Visual Studio Code

安装方法

Golang

Golang:下载地址
下载需要平台的安装包安装即可,这里不多介绍.我使用的是Mac,下载了pkg文件安装了就好,后面也不具体介绍其他平台的,但是大致都相同.安装完成后记得设置环境变量.

Visual Studio Code

安装Visual Studio Code 0.10 或以上版本,在 Visual Studio Code中 按下c md-shift-p,在命令框输入install,选择Install Extension
然后输入Go,查找并选中Rich Go language support for Visual Studio Code,有两个,别选错了.
Go更好的开发环境Visual Studio Code
安装完成后会提示重启软件.

安装插件

需要在命令行下依次安装以下插件,这些都是go语言编写的.
 go get -u -v github.com/nsf/gocode
 go get -u -v github.com/rogpeppe/godef
 go get -u -v github.com/golang/lint/golint
 go get -u -v github.com/lukehoban/go-find-references
 go get -u -v github.com/lukehoban/go-outline
 go get -u -v sourcegraph.com/sqs/goreturns
 go get -u -v golang.org/x/tools/cmd/gorename

配置

按下cmd+,或者通过菜单打开配置文件.
Go更好的开发环境Visual Studio Code

       {
            "go.buildOnSave": true,
            "go.lintOnSave": true,
            "go.vetOnSave": true,
            "go.buildFlags": [],
            "go.lintFlags": [],
            "go.vetFlags": [],
            "go.formatOnSave": true,
            "go.formatTool": "goreturns",
            "go.goroot": "/usr/local/go",
            "go.gopath": "/Users/damir/devTool/golib:/Users/damir/Code/go"
        }

其中
go.formatTool可以修改为goreturns,goimports,gofmt.

go.formatOnSave设置为true才可以保存时格式化.
相关的路径必须设置正确.

如果需要给不同的项目做不同的配置,那么将配置文件放入.vscode/settings.json即可

使用方法

自动保存

虽然插件作者强烈建议开启自动保存,但是我这里不推荐,开启了自动保存会出现代码编写一半发生跳动等问题.但是要使跳转定义等
功能正确工作,需要保存文件并确保无错.

代码高亮

打开Go项目所在文件夹,即可打开该项目,左侧点击相应的*.go文件,可见代码高亮了.
Go更好的开发环境Visual Studio Code

自动完成列表

输入相应的代码会自动提示
Go更好的开发环境Visual Studio Code
从图片上可以看出,同时也显示了函数的定义,显示方式也很不错.

代码片段

直接输入即触发.
Go更好的开发环境Visual Studio Code

快速提示函数定义

在实际编码过程中,经常会需要查看函数的参数信息,变量的类型,现在只需要将鼠标指上去即可查看.
Go更好的开发环境Visual Studio Code

跳转定义

跳转到函数定义只需要⌘+鼠标左键,或者直接按下F12即可.如果只需要大致查看⌘+鼠标左键指向就能显示(可惜不能显示当前函数Doc).
返回到之前的按键是ctrl+-ctrl+shift+-,这样就能快速导航了.
Go更好的开发环境Visual Studio Code

查找引用

可以通过命令呼叫或者用快捷键shift+F12.查找项目下相关的引用.
Go更好的开发环境Visual Studio Code

代码大纲

按下⌘+P,然后输入@即可.
Go更好的开发环境Visual Studio Code

重命名

选中需要重命名的方法名称或者变量名,按下F2即可修改.

特别注意,这里不能双击选中方法名称或者变量名,否则会出错.你可以鼠标单击该位置,或者拖动选择.
 我下面先演示错误操作提示的错误信息.
 另外,重构操作较慢,需要等待

Go更好的开发环境Visual Studio Code

保存时编译

保存时会自动编译,并列出错误信息,也可以在错误行查看具体的错误信息.
Go更好的开发环境Visual Studio Code

Imports管理

可以通过⌘+Shift+P来呼出Command窗口,输入Go Import来导入,另外可以设置快捷键.当然从上面的保存时编译中
的动态图可以看出,输入一个包名并直接使用,保存的时候会自动导入,当然如果文件未用到该包,保存时会自动去除.
Go更好的开发环境Visual Studio Code

{"key":"cmd+k i","command": "go.import.add"}我用了 ⌘+K I来作为快捷键.

调试

调试还需要安装一些东西
要使用这个功能首先要保证go的版本为1.5或者以上.

这里介绍Mac OS的,如果其他操作系统可以参考[文档] ( https://github.com/derekparker/delve/wiki/Building) ,不过暂时不支持Windows

创建证书

  • 打开应用程序–>其他–>钥匙串访问

  • 打开菜单 钥匙串访问–>证书助理–>创建证书

  • 输入名字dlv-cert,身份类型选择自签名根证书,证书类型选择代码签名,选中让我覆盖这些默认值选项框.点击继续.将有效天数修改到3650

  • 填写相应的信息直到选择指定用于该证书的位置选择系统,然后完成.

Go更好的开发环境Visual Studio Code

  • 在主菜单中–>钥匙串–>系统–>dlv-cert–>右键–>显示简介–>信任–>使用此证书时始终信任.
    Go更好的开发环境Visual Studio Code

  • 重启系统

获取代码与安装

注意:安装前如果你的GoPath包含:分割的多个路径,请先改为单路径.

git clone https://github.com/derekparker/delve.git
然后进入到这个目录下面执行
GO15VENDOREXPERIMENT=1 CERT=dlv-cert make install
完成后即可安装成功
执行dlv可见输出表示正确安装.

使用方法

按照如下步骤自动会生成配置文件
Go更好的开发环境Visual Studio Code

dlv项目现在bug不少,beego的项目现在也不能被调试,不过作者在持续改进.

在 Visual Studio Code中调试

Visual Studio Code快捷键

快捷键可以去快捷键的设置里面查看完整列表,这里列出一些常用的快捷键.

  • CMD+D         #类似于sublime的该功能,能够自动选中其他相同的

  • ALT+鼠标点击   #选中不同的位置

  • CMD+UP        #文件结尾

  • CMD+DOWN     #文件开头

  • CMD+Right     #行开头

  • CMD+Left      #行结尾

  • CMD+P         #调出导航,连按直接导航到相应的文件  CMD+E同样效果

  • CMD+O         #打开文件

  • CMD+W         #关闭激活窗口

  • CMD+K P       #复制激活窗口的路径

  • CMD+B         #折叠左侧窗口

  • CMD+SHIFT+P   #显示命令窗口,等同于按F1

  • CMD+SHIFT+O   #列出文件大纲

  • CTRL+G        #跳转到行

  • CMD+F         #查找,等同于CMD+G

  • ALT+CMD+F     #替换

  • ALT+UP    ALT+DOWN  #移动行

  • CMD+.         #快速Fix

  • CMD+ENTER     #插入新行

  • CMD+SHIFT+K   #删除当前行

以上快捷键是我自己常用的

写在最后

这个插件在某些功能上执行缓慢,不过插件还在持续演进,另外Visual Studio Code确实值得称赞,可以称得上良心,具体的还需要上手去体验.
相关的功能还很多,后面我会继续介绍一些.准备写一些Visual Studio Code搭建一个Web项目的全部,还有Visual Studio Code写C#项目的一些东西.

参考资料

Visual Studio Code 开源免费跨平台代码编辑器  
Go for Visual Studio Code
delve

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
京东云开发者 京东云开发者
6个月前
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这