Go 中的動態回傳類型:使用泛型和類型斷言
動態回傳類型通常在程式語言中用於傳回不同型別的值。在 Go 中,這不可能直接實現,因為函數的返回類型是固定的。但是,有一些解決方法可以實現類似的功能。
一種方法是使用通用傳回類型,例如 interface{}。此類型可以保存任何類型的值,從而允許函數傳回不同類型的值。但是,這種方法需要類型斷言才能安全地使用返回值,因為編譯器無法在編譯時確定實際類型。
func ReturnModels(modelName string) interface{} { // Get models from the database if modelName == "brands" { return []Brand{ {Name: "Gucci"}, {Name: "LV"}, } } else if modelName == "posts" { return []Post{ {Author: "J.K.R.", Content: "Whatever"}, } } return nil } func main() { result := ReturnModels("brands") if brands, ok := result.([]Brand); ok { fmt.Printf("List of Brands: %v\n", brands) } result = ReturnModels("posts") if posts, ok := result.([]Post); ok { fmt.Printf("List of Posts: %v", posts) } }
在此範例中,ReturnModels 函數傳回一個 interface{} 值。 main 函數執行類型斷言以檢索傳回值的實際類型。如果類型斷言成功,則可以按預期使用返回值。
這種方法允許在 Go 中動態返回類型,同時保持類型安全。但是,它引入了類型斷言的開銷,並且可能需要額外的錯誤處理來確保類型斷言成功。
以上是Go 如何使用泛型和型別斷言實作動態傳回型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!