第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

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

2 回答

?
楊__羊羊

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊

我通常使用這樣的模式。我創(chuàng)建了一個(gè)通用的Result類型,它存儲(chǔ)作為接口的Data和作為錯(cuò)誤類型的Err 。所以我可以重用 Result 類型來返回不同類型的不同函數(shù)。然后使用switch type來確定函數(shù)返回什么類型。Go Playground 請(qǐng)查看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")}

}


查看完整回答
反對(duì) 回復(fù) 2022-06-27
?
白衣非少年

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊

像這樣的東西?語言規(guī)范中描述了類型開關(guān)。請(qǐng)參閱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

    }

}

對(duì)于 Go 游樂場,請(qǐng)參閱https://play.golang.org/p/0ahpua7ujb2。


查看完整回答
反對(duì) 回復(fù) 2022-06-27
  • 2 回答
  • 0 關(guān)注
  • 181 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)