大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。
主要记录:
Go 插件使用操作方式:
命令式的操作:
ctrl+shift+p
,输入:go:相关命令
手动鼠标点
Go:Generate Unit Tests For Function
Go:Generate Unit Tests For Function
测试代码:
func Add(a, b int) int {
return a + b
}
操作命令后,会在函数所在文件的同级目录下生成测试代码:
func TestAdd(t *testing.T) {
type args struct {
a int
b int
}
tests := []struct {
name string
args args
want int
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Add(tt.args.a, tt.args.b); got != tt.want {
t.Errorf("Add() = %v, want %v", got, tt.want)
}
})
}
}
TODO: Add test cases.
需要你填写自己的测试用例
不过要值的注意的是,在测试函数中,使用t.Log()
函数是不会在终端输出内容的,需要加一个-v
参数:
go
插件,点击右下角的 设置图标Go:Build Flags
,添加 -v
项,如下:这样在执行TestXXX
函数的时候,就能在终端输出log
的内容了
Go:fill Struct
在上面生成的单元测试中,在需要添加的测试case的地方来自动生成结构体实例化
{}
,任意结构体的实例化也是这样,如:u := &User{}
,光标在{}
中,然后执行命令操作即可。生成的代码如下:
tests := []struct {
name string
args args
want int
}{
{
name: "",
args: args{
a: 0,
b: 0,
},
want: 0,
}
}
不过要注意一点:
由于tests
的类型是一个结构体切片[]struct
,所以在生成的代码后面需要手动补一个逗号,
,按保存就自动格式化代码了
这个经常用,我设置了快捷键 alt + f
Go:Generate Interface Stubs
该命令需要参数,输入三个内容:
s
*Student
,你可以指定是值类型还是引用类型code.Speaker
完整内容:s *Student code.Speaker
package code
type Speaker interface {
// Speak speak action
Speak()
}
type Student struct {
}
// Speak speak action
func (s *Student) Speak() {
panic("not implemented") // TODO: Implement
}
可以看到,连注释也顺便帮忙生成了。
Go:Add Tags To Struct Fileds
Go:Remove Tags From Struct Fileds
选中你要生成tag
的字段,执行命令(增加和删除都是同理,需要选中字段,只会执行已选中的字段)
默认是只生成 json tag
,可以自定义。在setting.json
,加入go.addTags
设置即可
设置示例:
// 结构体tag 设置
"go.addTags": {
// 可配置多个tag json,orm
"tags": "json,form",
// options 可以填入json=omitempty
"options": "",
"promptForTags": false,
// snakecase:下划线分隔, camelcase:驼峰命名
"transform": "camelcase"
},
这个我也常用,设置快捷键alt+a
,删除不常用,未设置。
Go:Add import
一般情况下,写代码智能提示或者保存的时候就会自动引入包。但是有时候vscode在引入同名的包时,会引入错误的包,这种情况主要是本地pkg->mod
目录下有了重名的库,vscode无法知道是哪个。
这时候需要我们手动引入,执行命令,然后输入包名,从展示列表中选中你想要的回车即可,支持模糊搜索
这个常用,我也设置了快捷键:alt+i
ctrl+f12
Go to implementations
该操作会出现两种情况:
F2
,然后输入你想要的命名这个操作会将凡是引用该字段、方法、接口的地方全部重命名,并且支持跨文件
Go:Extract to variable
字段提取主要用于判断条件复杂的场景,如果该条件判断在多个地方使用,最好是抽离出来,提取成一个变量
操作:
等待1s,生成代码
Go:Extract to function
函数提取主要用于逻辑可复用的场景。把同一段逻辑抽离成一个函数
操作:
等待1s,生成代码
原代码:
func ExtractFuncTest(a, b, c int) {
if a > 0 {
}
if b > 0 {
}
if c > 0 {
}
}
选中里面的逻辑,函数提取后的代码:
func ExtractFuncTest(a, b, c int) {
flag(a, b, c)
}
func flag(a int, b int, c int) {
if a > 0 {
}
if b > 0 {
}
if c > 0 {
}
}
一般vscode左侧只会展示当前项目的目录,引入的第三方库并不会展示出来。并不像Goland
一样,有个External Libary
目录
这个功能不太好用,目前我只能导入一些go
的库,如fmt
,errors
库,第三方库并不行。待解决
在settings.json
中,输入go.editorContextMenuCommands
,事实上,输入前几个字母就会智能提示,回车后就会生成配置,如下:
"go.editorContextMenuCommands": {
"toggleTestFile": true,
"addTags": false,
"removeTags": true,
"testAtCursor": true,
"testFile": true,
"testPackage": false,
"generateTestForFunction": true,
"generateTestForFile": false,
"generateTestForPackage": false,
"addImport": false,
"testCoverage": true,
"playground": true,
"debugTestAtCursor": true
},
true
表示开启,设置完后,重启VS code即可
参考:
B站——【教程】vscode-go插件的这些用法,你真的知道么?