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

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

如何創(chuàng)建具有不同簽名的函數(shù)切片?

如何創(chuàng)建具有不同簽名的函數(shù)切片?

Go
動漫人物 2022-01-10 17:16:30
如何創(chuàng)建具有不同簽名的函數(shù)切片?我嘗試了下面的代碼,但感覺很hack-ish。我們是否只是硬著頭皮使用切片接口{}?package mainimport (    "fmt")type OneParams func(string) stringtype TwoParams func(string, string) stringtype ThreeParams func(string, string, string) stringfunc (o OneParams) Union() string {    return "Single string"}func (t TwoParams) Union() string {    return "Double string"}func (t ThreeParams) Union() string {    return "Triple string"}type Functions interface {    Union() string}func Single(str string) string {    return str}func Double(str1 string, str2 string) string {    return str1 + " " + str2}func Triple(str1 string, str2 string, str3 string) string {    return str1 + " " + str2 + " " + str3}func main() {    fmt.Println("Slice Of Functions Program!\n\n")    fSlice := []Functions{        OneParams(Single),        TwoParams(Double),        ThreeParams(Triple),    }    for _, value := range fSlice {        switch t := value.(type) {        case OneParams:            fmt.Printf("One: %s\n", t("one"))        case TwoParams:            fmt.Printf("Two: %s\n", t("one", "two"))        case ThreeParams:            fmt.Printf("Three: %s\n", t("one", "two", "three"))        default:            fmt.Println("Huh! What's that?")        }    }    fmt.Println("\n\n")}這只是試圖用 Go 做太多事情的一個例子嗎?
查看完整描述

2 回答

?
德瑪西亞99

TA貢獻1770條經(jīng)驗 獲得超3個贊

請檢查一下,我不知道它是否你想要的。因為我不知道你到底想要什么。


package main


import (

    "fmt"

    "reflect"

)


func A() {

    fmt.Println("A")

}


func B(A int) {

    fmt.Println("B", A)

}


func C(A string, B float32) {

    fmt.Println("C", A, B)

}


func main() {

    f := []interface{}{A, B, C}

    f[0].(func())()

    f[1].(func(int))(15)

    f[2].(func(string, float32))("TEST", 90)


    fmt.Println("\n******* another thing ******")

    for a, v := range f {

        v := reflect.TypeOf(v)

        fmt.Println("#######", a)

        fmt.Println("num param :", v.NumIn())

        for i := 0; i < v.NumIn(); i++ {

            fmt.Println("param :", i, "type is ", v.In(i))

        }

    }

}

檢查去游樂場


這里我有另一個使用反射調(diào)用的示例


package main


    import (

        "fmt"

        "reflect"

    )


    func A() {

        fmt.Println("A")

    }


    func B(A int) {

        fmt.Println("B", A)

    }


    func C(A string, B float32) {

        fmt.Println("C", A, B)

    }


    func main() {

        f := []interface{}{A, B, C}

        f[0].(func())()

        f[1].(func(int))(15)

        f[2].(func(string, float32))("TEST", 90)


        fmt.Println("\n******* calling with reflect ******")

        for a, v := range f {

            v := reflect.TypeOf(v)

            //calling the function from reflect

            val := reflect.ValueOf(f[a])

            params := make([]reflect.Value, v.NumIn())

            if v.NumIn() == 1 {

                params[0] = reflect.ValueOf(1564)

            } else if v.NumIn() == 2 {

                params[0] = reflect.ValueOf("Test FROM reflect")

                params[1] = reflect.ValueOf(float32(123456))

            }

            val.Call(params)

        }

    }


查看完整回答
反對 回復(fù) 2022-01-10
?
慕桂英3389331

TA貢獻2036條經(jīng)驗 獲得超8個贊

取決于你需要什么不同。根據(jù)您的示例,我們可以使用variadic。


package main


import(

    "fmt"

    "strings"

)


func foo(ss ...string) string{

    return strings.Join(ss, " ")

}


func main(){

    fmt.Println(foo("one"))

    fmt.Println(foo("one", "two"))

    fmt.Println(foo("one", "two", "three"))

}


查看完整回答
反對 回復(fù) 2022-01-10
  • 2 回答
  • 0 關(guān)注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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