我正在寻找调用几个方法的最有效方法 在一起。
基本上我试图一起调用那些方法,如果出错,返回错误,否则返回结构类型。
此代码正在运行,但我无法获取结构类型或错误,我不确定它是否正确的方法。
go func()(struct,err) {
struct,err= sm.MethodA()//return struct type or error
err = sm.MethodB()//return error or nill
return struct,err
}()
答案 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)
}
你可以在这里弄清楚它是否更有意义: