首页 > 文章列表 > Golang中如何定义一种类型以包含多个不同类型的值

Golang中如何定义一种类型以包含多个不同类型的值

247 2024-03-04
问题内容

func GetFailedReasonAndErr (xxx) (string, error){
...
}

func AnyFailed (args ...(string, error)) {
   for _, arg := range args {
      if arg.error != nil {
         return arg
       }
   }
}

func main () {
    reason, err := AnyFailed(GetFailedReasonAndErr(yyy), GetFailedReasonAndErr(zzz))
    println(reason, err)
}

上面的代码无法编译,因为不允许“args ...(string, error)”。 我可以将(字符串,错误)定义为一种类型吗?或者任何更好的方法?(可以使用结构?) 喜欢 : 类型reasonanderror(字符串,错误)


正确答案


我可以将(字符串,错误)定义为一种类型吗?

不,不使用该语法。 go 没有元组。

(可以使用结构体?)例如:type reasonanderror (string, error)

是的,声明一个结构类型并使用它。声明结构类型的语法如下:

type reasonanderror struct {
    reason string
    err    error
}

然后,要使用它,您可以执行以下操作:

func GetFailedReasonAndErr(xxx) reasonAndError {
    // ...
}

func AnyFailed(args ...reasonAndError) (string, error) {
   for _, arg := range args {
      if arg.err != nil {
         return arg.reason, arg.err
       }
   }
   return "", nil
}

func main () {
    reason, err := AnyFailed(GetFailedReasonAndErr(yyy), GetFailedReasonAndErr(zzz))
    println(reason, err)
}