首頁  >  文章  >  後端開發  >  如何在golang中將多種類型定義為一種類型

如何在golang中將多種類型定義為一種類型

WBOY
WBOY轉載
2024-02-09 10:03:19601瀏覽

如何在golang中將多種類型定義為一種類型

在golang中,有時我們需要將多種類型定義為一種類型,以便更靈活地處理資料。對於這個問題,php小編新一為大家帶來了解決方案。透過使用介面類型(interface),我們可以實現將多個不同的類型定義為一種類型的目的。介面類型可以定義一組方法的集合,而不需要指定特定的實作。這樣,我們就可以將多種類型都實作該接口,然後使用該接口類型進行統一的操作和處理。這種方式不僅簡化了程式碼結構,還提高了程式碼的可讀性和可維護性。接下來,讓我們來看看具體的實作步驟吧!

問題內容

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)
}

以上是如何在golang中將多種類型定義為一種類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除