Golang最有效的方式一起调用方法

时间:2015-03-29 14:21:48

标签: go

我正在寻找调用几个方法的最有效方法 在一起。

基本上我试图一起调用那些方法,如果出错,返回错误,否则返回结构类型。

此代码正在运行,但我无法获取结构类型或错误,我不确定它是否正确的方法。

go func()(struct,err) {
        struct,err= sm.MethodA()//return struct type or error
         err = sm.MethodB()//return error or nill
return struct,err
    }()

1 个答案:

答案 0 :(得分:0)

在Go中,返回两个值并检查nil是否错误

是惯用的

例如:

func myFunc(sm SomeStruct) (MyStruct, error) {
  s, err := sm.MethodA()
  if err != nil {
    return nil, err
  }
  if err := sm.MethodB(); err != nil {
    return nil, err
  }

  return s, nil 
}

需要注意的一点是,您正在goroutine中运行您的功能。该goroutine中的任何返回值都不会返回到您的主goroutine。

为了获得该例行程序的返回值,您必须使用等待值的通道。

在你的情况下

errChan := make(chan error)
retChan := make(chan SomeStructType)

go func() {
    myVal, err := sm.MethodA()
    if err != nil {
        errChan <- err
        return
    }

    if err := sm.MethodB(); err != nil {
        errChan <- err
        return
    }

    retChan <- myVal
}()

select {
case err := <-errChan:
    fmt.Println(err)
case val := <-retChan:
    fmt.Printf("My value: %v\n", val)
}

你可以在这里弄清楚它是否更有意义:

http://play.golang.org/p/TtfFIZerhk