在 Go 中,如何编写接受元组参数的函数?

我是 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, stringfunc t2(test bool, true_val, false_val s2) s2,但不会编译

谢谢


慕雪6442864
浏览 246回答 2
2回答

ibeautiful

使用 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 goodbyehi 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}

一只甜甜圈

您可以使用数组(如果数字是可变的,甚至可以使用切片):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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go