Golang Go语言中尝试通过预处理解决 `if err != nil {...}` 问题
Golang Go语言中尝试通过预处理解决 if err != nil {...}
问题
https://github.com/lance6716/errhell
输入:
package main
func main() {
returnErr().try
}
func returnErr() error {
return nil
}
输出:
package main
func main() {
_err0 := returnErr()
if _err0 != nil {
return
}
}
func returnErr() error {
return nil
}
我是期望完成类似 gofmt 一样的程序,让 IDE 调用从而方便生成 if err != nil {...}
。当然如果 IDE 甚至 go 自己做的话,解析类型系统更好,生成的代码也会更好。
求 PR
更多关于Golang Go语言中尝试通过预处理解决 `if err != nil {...}` 问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
没高亮,没补全。。。
而且 codegen 我个人不太喜欢,总感觉是抢编译器的活
更多关于Golang Go语言中尝试通过预处理解决 `if err != nil {...}` 问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
没有宏就自己变换 AST🙃
可以考虑用 C 预处理器处理
输入<br>#define TRY(expr) _err0 := expr \<br> if _err0 != nil { \<br> return \<br> }<br><br>package main<br><br>func main() {<br> TRY(returnErr())<br>}<br><br>func returnErr() error {<br> return nil<br>}<br>
输出<br>package main<br><br>func main() {<br> _err0 := returnErr() if _err0 != nil { return }<br>}<br><br>func returnErr() error {<br> return nil<br>}<br>
https://godbolt.org/z/qerczhEY9
不过这个方法不能生成换行,不知道是否符合 Golang 的要求
return 需要检查当前函数的返回值有几个、什么类型。可以看一下仓库 readme 里面测试文件链接
感觉可以通过注释来识别需要处理的函数,这样的话应该对 IDE 比较友好吧
要不然统一返回数据,要不然定义多个宏,让用户选择
mark 一下,说不定若干年以后这就是 go++ 的起源(
建议使用 Goland, 输入可以快捷自动补全,显示时可以精简显示,很美观。
或者和 rust 一样,加个问号向上抛?
怎么配置可以达到这个效果 😂 能省下我好多时间
就是默认效果,当时我第一次用就服气了,活该 JetBrains 赚钱。
goland 岂不是能省很多精力时间
不是函数调用,是针对 if err != nil 的 snippet 和简化显示。也就是说,输入很方便,显示也很简洁,err 处理的问题就不存在了呀。
我这个可以处理函数有多个返回值,其中一个是 error ,以及自动填充合法的 return
go 本来就有类似 try catch 的写法 为什么要创造这种无用的东西呢
在Golang(Go语言)中,if err != nil {...}
的处理模式非常常见,它用于错误处理。尽管这种模式有其明确的好处,比如明确和直接的错误处理路径,但在某些情况下,开发者可能会希望寻找一种更简洁或更具表达力的方式来处理错误。
预处理通常意味着在执行主要逻辑之前进行某些检查或准备工作。然而,在Go语言中,通过预处理来完全避免 if err != nil {...}
结构并不现实,因为Go语言的设计哲学强调简洁和明确,而不是通过魔法或预处理来隐藏错误处理逻辑。
尽管如此,有一些编程技巧可以帮助减少 if err != nil {...}
的重复和冗余,比如:
- 封装错误处理逻辑:将错误处理逻辑封装到函数或方法中,以减少重复代码。
- 使用辅助函数:创建一些辅助函数来处理常见的错误情况,例如日志记录、错误消息格式化等。
- 利用Panics和Recover:在特定情况下,可以使用Panics和Recover来处理不可恢复的错误,但这通常不推荐用于常规错误处理。
尽管有这些技巧,但 if err != nil {...}
仍然是Go语言中处理错误的主要方式。它简单明了,易于理解和维护。开发者应该接受这种模式,并寻找在特定情况下减少其冗余的方法,而不是试图完全避免它。