2016-04-26 6 views
-2

PHPでは、list()があります。これにより、1回の操作で変数リストに値を割り当てることができます。例:PHPのlist()と同じことは何ですか?

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

Goで同じことが可能ですか? Regexp.FindStringSubmatch()のような関数は配列を返すので、この値を別の変数に直接マップするといいでしょう。

+3

アンパックの使用についてはhttp://stackoverflow.com/questions/19832189/unpack-golang-slices-on-assignmentを参照してください。リストコンストラクタは必要ありません。 –

答えて

0

あなたはそれを外出先で行うことはできませんが、その変数のポインタ値を利用して達成する方法があります。

関数を作成し、すべてのレシーバ変数のポインタをスライスとして渡してから、値を再割り当てします。すべての変数を渡して、この技術を使用することにより

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

は問題ではありません。

+0

です。 'a、b、c:= s [0]、s [1]、s [2]'ではなく、それを使いますか?それは配列ではなくスライスです。 – OneOfOne

1

あり、組み込みの何もないですが、あなたは似た何かをするために、独自の関数を書くことができます。

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

a, b := unlist(values); 

しかし、これはあなたが関数を記述しなければならないことを意味し、これを一般化する方法がないことを意味していあなたが必要とするすべての異なる数とタイプの議論を破壊するためのものです。

*注:この操作の一般的な名前は「非構造化割り当て」です。

+0

これは有効ではありません。 – OneOfOne

+0

@OneOfOne:大変申し訳ありませんが、誰かが答えを編集しても無効であることを続けています。彼は明らかに、複数の戻り値がどのように動作するのかを理解していません。 – slebetman

+0

@Noval Agung Prayogo:作業コードを無効なコードに変更しないでください。どのように戻って仕事を行うのか教えてください – slebetman

関連する問題