为了账号安全,请及时绑定邮箱和手机立即绑定

在 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 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号