相关疑难解决方法(0)

去错误处理技术

我刚刚开始使用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团队想出更好的东西.我问的是我做得对,还是我错过了社区提出的一些技巧.谢谢大家.

go

106
推荐指数
3
解决办法
2万
查看次数

隐藏零值,理解为什么golang在这里失败

我无法理解如何正确地确保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)

null pointers interface go

44
推荐指数
2
解决办法
1万
查看次数

在go中处理多个错误

我是新手,发现错误处理非常冗长.我已经阅读了它的推理并且大多数都同意,但是有一些地方似乎有更多的代码来处理错误而不是实际工作.这是一个(人为的)例子,我在这里管道"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)

error-handling go

10
推荐指数
1
解决办法
1090
查看次数

golang:无法从Out Of Memory崩溃中恢复过来

在某些情况下,调用append()会触发内存不足的恐慌,似乎append()本身不会返回nil.

我怎么能避免这种恐慌情景并向我的用户显示"资源暂时不可用"?

最好的祝福,

go

8
推荐指数
1
解决办法
1075
查看次数

标签 统计

go ×4

error-handling ×1

interface ×1

null ×1

pointers ×1