在这里插入图片描述

快捷键大全

Windows/Linux版本

image-20221002213235635

Mac版本

image-20221002213356964

代码自动生成

1. 动态模板

在 GoLand 中,预定义的动态模板位于 Preferences → Editor → Live Templates ,并且分组。

image-20221002210259720

插入动态模板

键入模板缩写并按调用键(通常Tab默认情况下)。

或者,在代码菜单上,单击插入动态模板 Ctrl+J以打开建议列表并选择必要的模板。

用动态模板包围代码块
  1. 选择一段代码被包围。
  2. 在代码菜单上,单击环绕 Ctrl+Alt+J以打开建议列表并选择必要的模板。
动态模板的类型

区分以下类型的动态模板:

  • 简单模板 只包含固定的纯文本。当你展开一个简单的模板时,文本会自动插入到你的源代码中,替换缩写。

    缩写扩展到
    impimport ( )
    intfunc init() { }
    mainfunc main() { }
  • 参数化模板 包含启用用户输入的变量。当你展开参数化模板时,变量要么替换为输入字段供用户手动指定,要么由 GoLand 自动计算。

    缩写扩展到
    forrfor key, value := range collection { }
    methfunc (receiver ) name(params) { }
  • 环绕模板 用用户指定的文本包装选定的代码块。

    Postfix 代码完成类似于动态模板。它转换当前表达式而不选择它。例如,你可以.if在表达式后键入以调用相应的后缀完成并用if语句包装表达式。

配置动态模板

要配置动态模板,请打开Editor | IDE 设置的Live TemplatesCtrl+Alt+S页面。在Live Templates页面上,你可以查看所有可用的动态模板、编辑它们并创建新模板

可参考 在 GoLand 中使用自定义动态模板高效编程

2. 自动生成注释(Goanno)

安装
  • 方式一:goland plugins marketplace(搜索Goanno)
  • 方式二:下载release jar(goland install from disk) goanno.jar
使用
  • 方式一:在函数上方点击快捷键 control + commond + / (windows: control + alt + /)
  • 方式二:右键->Generate -> Goanno
自定义模板

通过Tools-Goanno Setting编辑模版信息

3. 自动生成测试文件(Goanno)

demo

安装

最低 Go 版本: Go 1.6

用于go get安装和更新:

// Go 版本:< Go 1.17
go get -u github.com/cweill/gotests/...
// Go 版本:>= Go 1.17
go install -u github.com/cweill/gotests/...
用法

从命令行,gotests可以为特定的源文件或整个目录生成 Go 测试。默认情况下,它将其输出打印到stdout.

gotests [options] PATH ...
options说明
-all           generate go tests for all functions and methods 
-excl          regexp. generate go tests for functions and methods that don't match. Takes precedence over -only, -exported, and -all
-exported      generate go tests for exported functions and methods. Takes precedence over -only and -all
-i             print test inputs in error messages
-only          regexp. generate go tests for functions and methods that match only.Takes precedence over -all
-w             write output to (test) files instead of stdout
-nosubtests    disable subtest generation. Only available for Go 1.7+
-template_dir  optional. Path to a directory containing custom test code templates
  • 为源文件中所有的函数和方法生成test方法
gotests -all -w -i XXX.go
  • 为单个方法生成test方法
gotests -w -only ^XXX$ PATH
Goland中使用
  1. 光标移动到Method/Function上
  2. Command/Control+Shift+T

4. 自动格式化

GoLand也支持在保存代码时,自动调用 gofmtgoimports 来自动格式化代码。在GoLand(>=2019.3)中,是通过File Watchers插件来实现此功能的。

  • 首先,得保证安装了一个叫做”File Watchers”的插件,并设置为启用状态:
  • 然后,Tools → File Wathcers,一般引入go fmt,goimports即可

5. 自动生成tag

在 struct 结构里,可以在字段类型后敲入 json 或 xml 向结构添加标记。

6. 自动生成stuct的接口,tag,构造参数

1.stuct快速实现 Interface

操作步骤:

  1. 光标移动到struct 名称上
  2. Alt/Option + Enter
  3. 选择Implement Interface … Control+I
  4. 搜索你需要实现的interface
2.stuct快速抽象 Interface

操作步骤:

  1. 右键 struct 名称
  2. 选择 Refactor->Extract->Interface
  3. 选择要抽象的方法,填写interface名称
3.stuct快速生成tag

操作步骤:
1.把你的光标放在{}中间
2.Alt/Option + Enter
3.选择Add key to tag

4.stuct快速生成构造参数

操作步骤:

  1. 光标移动到struct 名称上
  2. Alt/Option + Enter
  3. Generate Constructor
  4. 选择属性

常见问题

Go module

1. GO目录中不存在go.mod文件

# 在该项目的根目录下,执行下面的命令:
go mod init task-manage   # task-manag就是项目的名称

go.sum 是记录所依赖的项目的版本的锁定。

2. Goland自动下载所有依赖

项目中使用了go.mod时可以使用以下命令自动下载全部依赖

方法一

go get -d -v ./...

方法二

go mod tidy

3. 导入本地 module

在这个module还没有发布到GitHub的情况下,如何import自己在本地创建的module?

在Go 1.17版本及之前版本的解决方法是使用go mod的replace指示符(directive)。假如你的module a要import的module b将发布到github.com/user/repo中,那么你可以手动在module的go.mod中的require块中手工加上一条:

require github.com/user/repo v1.0.0

注意v1.0.0这个版本号是一个临时的版本号。

然后在module a的go.mod中使用replace将上面对module b的require替换为本地的module b:

replace github.com/user/repo v1.0.0 => module b本地路径

这样go命令就会使用你本地正在开发、尚未提交github的module b了。

但这个本地路径是因开发者环境而异的。

可以使用go mod vendor

# vendor:将所有依赖包存到当前目录下的vendor目录下
go mod vendor

或者使用Go workspace

Go 1.18 版本中加入了 Go 工作区(Go workspace,也译作 Go 工作空间)辅助构建机制。

基于这个机制,我们可以将多个本地路径放入同一个 workspace 中,这样,在这个 workspace 下各个 module 的构建将优先使用 workspace 下的 module 的源码。工作区配置数据会放在一个名为 go.work 的文件中,这个文件是开发者环境相关的,因此并不需要提交到源码服务器上,这就解决了上面“伪造 go.mod”方案带来的那些问题。

go get -u github.com/cweill/gotests/…

测试

1. command-line-arguments [command-line-arguments.test]

golang ide执行 go test xxx_test.go 默认以file运行而没有引入依赖文件,需要主动引入依赖,执行测试文件之前需要先将源文件进行编译.通常: 项目在gopath或者项目根目录下,依赖可以正常找找到

解决方案1:go test -v
go test -v xxxx.go xxxx_test.go
解决方案2:goland ide 多选可快捷操作

选择要测试的文件, 就是没有_test后缀的文件
会出现 源文件和测试文件使用 |分割的写法.

解决方案3: go mod

使用mod模式 在根目录执行命令: go mod init [module-path] 使项目中出现go.mod文件 就可以执行了

赖可以正常找找到

解决方案1:go test -v
go test -v xxxx.go xxxx_test.go
解决方案2:goland ide 多选可快捷操作

选择要测试的文件, 就是没有_test后缀的文件
会出现 源文件和测试文件使用 |分割的写法.

解决方案3: go mod

使用mod模式 在根目录执行命令: go mod init [module-path] 使项目中出现go.mod文件 就可以执行了

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐