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

简介: 本文介绍了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文件 就可以执行了
相关文章
|
1月前
|
文字识别 监控 小程序
分享5款极大提升效率的小工具
本文推荐了五款高效实用的软件工具,包括简洁高效的便签工具Knotes、精准的文字识别工具天若OCR、多功能在线平台3171.cn、涵盖视频编辑与文件加密的GiliSoft,以及轻量级内存优化工具Memreduct。这些工具能够显著提升学习和工作的效率,是解决各类问题的得力助手,值得尝试。
40 1
|
5月前
|
测试技术 持续交付 API
Airtest脚本的重构与优化:提升测试效率和可读性
通过对Airtest脚本的重构与优化,我们不仅能提升测试效率,还能增强脚本的可读性和可维护性。这些改进将有助于应对不断变化的测试需求,为保证软件质量提供坚实的支持。记住,优化是一个持续的过程,定期回顾和调整测试脚本是保持测试项目健康的关键。希望以上分享能帮助大家在自动化测试的道路上更进一步。
|
5月前
|
数据库 SQL 存储
在编制代码时优化数据库操作性能
【6月更文挑战第3天】本文介绍了代码中可使用的SQL语句优化策略,了解并应用本文介绍的这些技巧可显著提升数据库性能。
52 2
|
Java 编译器 应用服务中间件
代码开发优化细节
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50% 。
209 2
代码开发优化细节
|
XML 机器学习/深度学习 JSON
|
设计模式 算法 Java
代码简化利器-行为参数化
在软件工程中,一个众所周知的问题就是,不管做什么,用户的需求肯定会变。比方说,有个应用程序是帮助农民了解自己的库存的。这位农民可能想有一个查找库存中所有绿色苹果的功能。但到了第二天,他可能会告诉你:“其实我还想找出所有重量超过150克的苹果。”又过了两天,农民又跑回来补充道:“要是我可以找出所有既是绿色,重量也超过150克的苹果,那就太棒了。”要如何应对这样不断变化的需求?理想的状态下,应该把工作量降到最少。此外,类似的新功能实现起来还应该很简单,而且易于长期维护。
128 0
代码简化利器-行为参数化
|
前端开发 JavaScript IDE
聊聊开发日常的效率提升工具(全)
前言:日常开发中,好的工具往往能让我们事半功倍,有句老话说得好:工欲善其事,必先利其器。使用高效率的工具可以极大提升我们的开发效率。接下来分享下树酱平时开发中经常使用的一些效率工具
234 0
聊聊开发日常的效率提升工具(全)
|
缓存 Dubbo NoSQL
祖传代码如何优化性能?
今天又带来一次性能优化的分享,这是我刚进公司时接手的祖传(坏笑)项目,这个项目在我的文章中屡次被提及,我在它上面做了很多的性能优化,比如《记一次提升18倍的性能优化》这篇文章,比较偏向某个细节的优化,本文更偏向宏观上的性能优化,可以说是个老演员了。
183 0
祖传代码如何优化性能?
QMutext 项目使用中的效率问题
最近做一个项目,采用Qt开发,在串口通讯采集与转发上要求高效率执行,发现效率不理想, 抛去串口返回响应时间的约束,程序逻辑实现上也花费了较长时间,最后定位在 QMutext为罪魁祸首。
1025 1