亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從同一函數返回未知數據類型?(哥朗)

如何從同一函數返回未知數據類型?(哥朗)

Go
肥皂起泡泡 2022-06-27 17:05:21
我對 Golang 有點陌生,我覺得非常有用的一件事是,如果我可以將未知的值類型返回給函數。有沒有辦法使用 Golang 在同一個函數中返回未知的不同類型的值?
查看完整描述

2 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

我通常使用這樣的模式。我創建了一個通用的Result類型,它存儲作為接口的Data和作為錯誤類型的Err 。所以我可以重用 Result 類型來返回不同類型的不同函數。然后使用switch type來確定函數返回什么類型。Go Playground 請查看https://play.golang.org/p/SbwGOP_aXLG


package main


import (

    "fmt"

    "errors"

    "os"

)


func main() {

    what := "multiple"

    result := Func(what)

    if result.Err != nil {

        fmt.Println(result.Err.Error())

        os.Exit(1)

    }

    

    switch res := result.Data.(type) {

        case Gopher:

            fmt.Println("Gopher name : ", res.Name)

        case Gophers:

            for _, g := range res {

                fmt.Println("Gopher name : ", g.Name)

            }

    }

}


type Result struct {

    Data interface{}

    Err error

}


type Gopher struct {

    Name string

}


type Gophers []Gopher


func Func(what string) Result {

    switch what {

        case "one":

            return Result{Data: Gopher{"gopher one"}}

        

        case "multiple":

            return Result{Data: Gophers{Gopher{"gopher one"}, Gopher{"gopher two"}}}

        

        

    }

    return Result{Err: errors.New("invalid what")}

}


查看完整回答
反對 回復 2022-06-27
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

像這樣的東西?語言規范中描述了類型開關。請參閱https://golang.org/ref/spec#Switch_statements。


package main


import "fmt"


func main() {

    p := BasedOnType(true)

    fmt.Println(p) //map[bool:true]

    p = BasedOnType(2)

    fmt.Println(p) //map[]

}


func BasedOnType(i interface{}) map[interface{}]interface{} {

    m := make(map[interface{}]interface{})

    switch x := i.(type) {

    case bool, float64, string:

        k := fmt.Sprintf("%T", x)

        v := fmt.Sprintf("%v", x)

        m[k] = v

        return m

    default:

        return m

    }

}

對于 Go 游樂場,請參閱https://play.golang.org/p/0ahpua7ujb2。


查看完整回答
反對 回復 2022-06-27
  • 2 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號