我刚刚开始使用Go.我的代码开始有很多这样的:
if err != nil {
//handle err
}
Run Code Online (Sandbox Code Playgroud)
或这个
if err := rows.Scan(&some_column); err != nil {
//handle err
}
Run Code Online (Sandbox Code Playgroud)
在Go中检查和处理错误是否有一些很好的习语/策略/最佳实践?
编辑澄清:我不是在追逐或暗示Go团队想出更好的东西.我问的是我做得对,还是我错过了社区提出的一些技巧.谢谢大家.
我无法理解如何正确地确保nil在这种情况下不存在某些事情:
package main
type shower interface {
getWater() []shower
}
type display struct {
SubDisplay *display
}
func (d display) getWater() []shower {
return []shower{display{}, d.SubDisplay}
}
func main() {
// SubDisplay will be initialized with null
s := display{}
// water := []shower{nil}
water := s.getWater()
for _, x := range water {
if x == nil {
panic("everything ok, nil found")
}
//first iteration display{} is not nil and will
//therefore work, on the second iteration …Run Code Online (Sandbox Code Playgroud) 我是新手,发现错误处理非常冗长.我已经阅读了它的推理并且大多数都同意,但是有一些地方似乎有更多的代码来处理错误而不是实际工作.这是一个(人为的)例子,我在这里管道"Hello world!" 进入猫并阅读和打印输出.基本上每一行都有三个来处理错误,我甚至都没有处理任何事情.
package main
import "fmt"
import "io"
import "io/ioutil"
import "os/exec"
func main() {
cmd := exec.Command("cat", "-")
stdin, err := cmd.StdinPipe()
if err != nil {
return
}
stdout, err := cmd.StdoutPipe()
if err != nil {
return
}
err = cmd.Start()
if err != nil {
return
}
_, err = io.WriteString(stdin, "Hello world!")
if err != nil {
return
}
err = stdin.Close();
if err != nil {
return
}
output, err := ioutil.ReadAll(stdout)
if …Run Code Online (Sandbox Code Playgroud) 在某些情况下,调用append()会触发内存不足的恐慌,似乎append()本身不会返回nil.
我怎么能避免这种恐慌情景并向我的用户显示"资源暂时不可用"?
最好的祝福,