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

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

在 Go 中,如何編寫接受元組參數的函數?

在 Go 中,如何編寫接受元組參數的函數?

Go
慕雪6442864 2022-01-04 10:35:55
我是 Go 的新手,我正在將 Python 程序翻譯成 Go。我是三元運算符的忠實粉絲,所以我很快就實現了func t2(test bool, true_val, false_val string) string {    if test {        return true_val    } else {        return false_val    }}這工作正常。不幸的是,我在 Python 中有這個: a = 'hi', 'hello' if xxx else 'bye', 'goodbye'我的三元運算符必須如何為字符串元組編寫?我努力了:泛型但了解到它們在 Go 中不存在做func t2(test bool, true_val, false_val (string, string)) (string, string)但它不編譯類型定義:type s2 string, string和func t2(test bool, true_val, false_val s2) s2,但不會編譯謝謝
查看完整描述

2 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

使用 2 個string返回值實現

它可能看起來像這樣:


func t(test bool, true1, true2, false1, false2 string) (string, string) {

    if test {

        return true1, true2

    }

    return false1, false2

}

測試它:


a1, a2 := t(false, "hi", "hello", "bye", "goodbye")

fmt.Println(a1, a2)


a1, a2 = t(true, "hi", "hello", "bye", "goodbye")

fmt.Println(a1, a2)

輸出(在Go Playground上試試):


bye goodbye

hi hello

使用切片[]string返回值實現

這可能是更容易閱讀和使用,如果我們有實現它的工作string片:[]string。


func t(test bool, trueVal []string, falseVal []string) []string {

    if test {

        return trueVal

    }

    return falseVal

}

測試它:


trueVal := []string{"hi", "hello"}

falseVal := []string{"bye", "goodbye"}


a := t(false, trueVal, falseVal)

fmt.Println(a)


a = t(true, trueVal, falseVal)

fmt.Println(a)

輸出(在Go Playground上試試):


[bye goodbye]

[hi hello]

使用包裝器struct返回值實現

您還可以選擇創建一個包裝器struct來保存任意數量的值(甚至具有任意/不同類型):


type Pair struct {

    v1, v2 string

}


func t(test bool, trueVal Pair, falseVal Pair) Pair {

    if test {

        return trueVal

    }

    return falseVal

}

測試它:


trueVal := Pair{"hi", "hello"}

falseVal := Pair{"bye", "goodbye"}


a := t(false, trueVal, falseVal)

fmt.Println(a)


a = t(true, trueVal, falseVal)

fmt.Println(a)

輸出(在Go Playground上試試):


{bye goodbye}

{hi hello}


查看完整回答
反對 回復 2022-01-04
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

您可以使用數組(如果數字是可變的,甚至可以使用切片):


func iff(test bool, true_val, false_val [2]string) (string, string) {

    if test {

        return true_val[0], true_val[1]

    }

    return false_val[0], false_val[1]

}

測試:


func main() {

    a, b := iff(false, [2]string{"hi", "hello"}, [2]string{"bye", "goodbye"})

    fmt.Println(a, b)


    a, b = iff(true, [2]string{"hi", "hello"}, [2]string{"bye", "goodbye"})

    fmt.Println(a, b)

}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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