什么是等同于PHP的列表()?

时间:2016-04-26 04:27:34

标签: arrays regex go

在PHP中,我们有list(),它使我们能够在一次操作中为一组变量赋值。例如:

list($a, $b) = ['valueA', 'valueB'];
echo $a; # valueA
echo $b; # valueB

Go可以做同样的事情吗?像Regexp.FindStringSubmatch()这样的函数返回一个数组,所以很好地将这个值直接映射到其他变量。

2 个答案:

答案 0 :(得分:3)

你不能在go中做到这一点,但有一种方法可以通过利用它变量的指针值来实现这一点。

创建一个函数,将所有接收器变量的指针作为切片传递,然后重新赋值。

func main() {
    var arr = []string{"value 1", "value 2", "value 3"}
    var a, b, c string

    vcopy(arr, &a, &b, &c)

    fmt.Println(a) // value 1
    fmt.Println(b) // value 2
    fmt.Println(c) // value 3
}

func vcopy(arr []string, dest ...*string) {
    for i := range dest {
        if len(arr) > i {
            *dest[i] = arr[i]
        }
    }
}

示例http://play.golang.org/p/gJzWp1WglJ

通过使用这种技术,传递任何变量都不是问题。

答案 1 :(得分:1)

没有任何内置功能,但您可以编写自己的功能来执行类似操作:

func unlist(x []string) (string, string) {
    return x[0], x[1]
}

a, b := unlist(values);

然而,这确实意味着没有办法概括这意味着你必须编写一个函数来解构*你需要的每个不同数量和类型的参数。

*注意:此操作的通用名称是“解构分配”。