在Go中,如何编写带有元组参数的函数?

时间:2016-04-10 13:08:25

标签: go tuples ternary-operator

我是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)但不编译
  • typedef:type s2 string, stringfunc t2(test bool, true_val, false_val s2) s2但它没有编译

由于

1 个答案:

答案 0 :(得分:2)

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