自动生成代码等效率小技巧

简介: 本文介绍了GoLand中的多种便捷功能,包括动态模板、自动生成注释与测试文件、自动格式化、生成struct标签和构造参数等。动态模板可通过预定义缩写快速生成代码片段,如`imp`生成导入语句。自动生成注释插件Goanno简化了文档编写过程,支持快捷键和右键菜单调用。生成测试文件功能则通过`gotests`命令或IDE内操作实现,方便为函数和方法创建测试。此外,GoLand还支持自动格式化代码、生成struct的接口和标签等功能,提升编码效率。对于Go模块管理中的常见问题,提供了详细的解决方案,如使用`go mod init`创建`go.mod`文件来管理依赖。

快捷键大全
Windows/Linux版本
Mac版本
代码自动生成

  1. 动态模板
    在 GoLand 中,预定义的动态模板位于 Preferences → Editor → Live Templates ,并且分组。
    插入动态模板
    键入模板缩写并按调用键(通常Tab默认情况下)。
    或者,在代码菜单上,单击插入动态模板 Ctrl+J以打开建议列表并选择必要的模板。
    用动态模板包围代码块
  2. 选择一段代码被包围。代码效果参考:https://www.h3cw.com/sitemap/post.xml
  3. 在代码菜单上,单击环绕 Ctrl+Alt+J以打开建议列表并选择必要的模板。
    动态模板的类型
    区分以下类型的动态模板:
    • 简单模板 只包含固定的纯文本。当你展开一个简单的模板时,文本会自动插入到你的源代码中,替换缩写。
    缩写
    扩展到
    imp
    import ( )
    int
    func init() { }
    main
    func main() { }
    • 参数化模板 包含启用用户输入的变量。当你展开参数化模板时,变量要么替换为输入字段供用户手动指定,要么由 GoLand 自动计算。
    缩写
    扩展到
    forr
    for key, value := range collection { }
    meth
    func (receiver ) name(params) { }
    • 环绕模板 用用户指定的文本包装选定的代码块。
    Postfix 代码完成类似于动态模板。它转换当前表达式而不选择它。例如,你可以.if在表达式后键入以调用相应的后缀完成并用if语句包装表达式。
    配置动态模板
    要配置动态模板,请打开Editor | IDE 设置的Live TemplatesCtrl+Alt+S页面。在Live Templates页面上,你可以查看所有可用的动态模板、编辑它们并创建新模板。
    可参考 在 GoLand 中使用自定义动态模板高效编程
  4. 自动生成注释(Goanno)
    安装
    • 方式一:goland plugins marketplace(搜索Goanno)
    • 方式二:下载release jar(goland install from disk) goanno.jar
    使用
    • 方式一:在函数上方点击快捷键 control + commond + / (windows: control + alt + /)
    • 方式二:右键->Generate -> Goanno
    自定义模板
    通过Tools-Goanno Setting编辑模版信息
  5. 自动生成测试文件(Goanno)
    安装
    最低 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中使用
  6. 光标移动到Method/Function上
  7. Command/Control+Shift+T
  8. 自动格式化
    GoLand也支持在保存代码时,自动调用 gofmt 和 goimports 来自动格式化代码。在GoLand(>=2019.3)中,是通过File Watchers插件来实现此功能的。
    • 首先,得保证安装了一个叫做”File Watchers”的插件,并设置为启用状态:
    • 然后,Tools → File Wathcers,一般引入go fmt,goimports即可
  9. 自动生成tag
    在 struct 结构里,可以在字段类型后敲入 json 或 xml 向结构添加标记。
  10. 自动生成stuct的接口,tag,构造参数
    1.stuct快速实现 Interface
    操作步骤:
  11. 光标移动到struct 名称上
  12. Alt/Option + Enter
  13. 选择Implement Interface … Control+I
  14. 搜索你需要实现的interface
    2.stuct快速抽象 Interface
    操作步骤:
  15. 右键 struct 名称
  16. 选择 Refactor->Extract->Interface
  17. 选择要抽象的方法,填写interface名称
    3.stuct快速生成tag
    操作步骤:
    1.把你的光标放在{}中间
    2.Alt/Option + Enter
    3.选择Add key to tag
    4.stuct快速生成构造参数
    操作步骤:
  18. 光标移动到struct 名称上
  19. Alt/Option + Enter
  20. Generate Constructor
  21. 选择属性
    常见问题
    Go module
  22. GO目录中不存在go.mod文件

    在该项目的根目录下,执行下面的命令:

    go mod init task-manage # task-manag就是项目的名称
    go.sum 是记录所依赖的项目的版本的锁定。
  23. Goland自动下载所有依赖
    项目中使用了go.mod时可以使用以下命令自动下载全部依赖
    方法一
    go get -d -v ./...
    方法二
    go mod tidy
  24. 导入本地 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/…
    测试
  25. 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文件 就可以执行了
相关文章
|
存储 对象存储 CDN
Hexo从0到1搭建博客系列04:图床的最佳实践
Hexo从0到1搭建博客系列04:图床的最佳实践
651 0
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
2091 0
|
JavaScript Java Linux
Go语言 thrift 入门指南--thrift IDL介绍
Thrift 是一个轻量级、跨语言的 RPC 框架,由 facebook 开发,2007年正式开源,2008 纳入 Apache 软件基金会开源项目。
2144 0
Go语言 thrift 入门指南--thrift IDL介绍
|
4月前
|
人工智能 JSON JavaScript
这个开源的「AI + 低代码」开发平台绝了,Gitee上斩获 9.2K Star!
VTJ.PRO 是一款 AI 驱动的低代码开发平台,深度融合 Vue3 技术栈,支持可视化设计与源码级编辑双向自由切换。通过 AI 智能生成、代码修复、跨端输出等能力,大幅提升前端开发效率,实现设计即代码、代码即设计的高效工作流,适用于原型开发、项目重构等多种场景。平台完全开源,提供在线沙盒与本地部署,助力开发者兼顾开发速度与代码自由度。
448 0
|
SQL 测试技术 API
如何编写API接口的自动化测试脚本
本文详细介绍了编写API自动化测试脚本的方法和最佳实践,涵盖确定测试需求、选择测试框架、编写测试脚本(如使用Postman和Python Requests库)、参数化和数据驱动测试、断言和验证、集成CI/CD、生成测试报告及维护更新等内容,旨在帮助开发者构建高效可靠的API测试体系。
|
Shell Windows
电脑文件打开缓慢、右键卡顿解决方案
本文汇总了几种解决电脑文件打开缓慢和右键点击文件夹卡顿问题的方案,包括重启资源管理器、修改注册表中的Shell Extensions、以及设置在单独的进程中打开文件夹窗口。
|
存储 缓存 网络协议
说说 HTTP1.0/1.1/2.0 的区别?
HTTP协议从1.0到1.1再到2.0不断发展,提升了性能和效率。HTTP1.0每次请求需新建TCP连接,而1.1默认保持长连接,允许多个请求复用一个连接,减少延迟。HTTP2.0引入多路复用,允许同时发送多个请求和响应,避免队头堵塞;采用二进制分帧,提高解析效率;并使用首部压缩减少数据传输;此外,服务器推送功能允许预加载资源,优化加载速度。
486 0
|
机器学习/深度学习 数据采集 人工智能
大模型时代如何快速开发AI应用?云上开发的优势与入门技巧
本文探讨了在大模型时代如何快速开发AI应用,包括选择合适的开发工具和框架、掌握常用的算法和模型、利用开源项目和社区资源以及注重数据预处理和特征工程等方面的技巧。此外,文章还介绍了云上AI开发的优势,包括高效的计算资源、便捷的协同办公、灵活的资源调度和安全可靠的数据存储和处理。最后,文章分享了一些快速入门AI开发的教程和技巧,帮助初学者更好地掌握AI开发的基础知识和实用技能。
768 1
|
缓存 测试技术 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(二)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
577 0
|
Python
Python中的逻辑运算符:且(and)与或(or)
Python中的逻辑运算符:且(and)与或(or)
6141 0