gpt4 book ai didi

go - 简化 go 中的错误处理

转载 作者:IT王子 更新时间:2023-10-29 01:54:22 27 4
gpt4 key购买 nike

在 C 和类似语言中,可以应用以下快捷方式来检测错误并在第一个非零结果处停止

(void)(result = dosomething() ||
result = dosomething() ||
result = dosomething()
)

if (result == 0 && ...

在 golang 中,我似乎无法做到这一点。

例如:

如果结果 = dosomething() || 结果=做某事();结果 < 0 { fmt.Printf("发生错误\n");

C 能够在检查非零值时将整数视为 bool 表达式。

例如我可以写

if (result = dosomething() || ... ) 

代替

if ( (result = dosomething()) == 0 || ... )

但是在 go 中,你不能那样做。

我以为我可以写:

if result = dosomething() == 0 ||
result = dosomething() == 0; result < 0 {
fmt.Printf("Error occurred\n");
}

但是我得到一个错误。

syntax error: result = dosomething() || result used as value

必须有一种方法将它们链接在一起。或者采用以下风格javascript promise dosomething().doSomething.doSomething.error() 方法是否可行?

这个问题有什么创造性的解决方案吗?我真的只是想避免很多重复的代码,我想在其中做一大堆事情,但是如果在任何时候出现错误就停止。因为各自的错误处理逻辑是完全一样的。

最佳答案

参见 Errors are valuesThe Go 博客 上。这篇由 Rob Pike 撰写的文章提供了一种有趣且强大的方法来处理一组运行良好的函数中的错误。

这个技巧我用过几次,确实有效。

作为引用,用于此技术的代码如下所示(从文章中复制):

// Helper type
type errWriter struct {
w io.Writer
err error
}

func (ew *errWriter) write(buf []byte) {
if ew.err != nil {
return
}
_, ew.err = ew.w.Write(buf)
}

//Usage:
ew := &errWriter{w: fd}
ew.write(p0[a:b])
ew.write(p1[c:d])
ew.write(p2[e:f])
// and so on
if ew.err != nil {
return ew.err
}

关于go - 简化 go 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45361921/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com