This question already has answers here:
Unpack slices on assignment?

(3个答案)


4年前关闭。




在PHP中,我们具有list(),它使我们能够在一个操作中将值分配给变量列表。例如:

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

Go可能做同样的事情吗?像 Regexp.FindStringSubmatch() 这样的函数返回一个数组,因此将这些值直接映射到其他变量中会很不错。

最佳答案

您不能一劳永逸地做到这一点,但是有一种方法可以利用它的变量的指针值来实现。

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

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

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

关于arrays - PHP的list()等效于什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36855264/

10-13 07:38
查看更多