PHPでは、list()
があります。これにより、1回の操作で変数リストに値を割り当てることができます。例:PHPのlist()と同じことは何ですか?
list($a, $b) = ['valueA', 'valueB'];
echo $a; # valueA
echo $b; # valueB
Goで同じことが可能ですか? Regexp.FindStringSubmatch()
のような関数は配列を返すので、この値を別の変数に直接マップするといいでしょう。
PHPでは、list()
があります。これにより、1回の操作で変数リストに値を割り当てることができます。例:PHPのlist()と同じことは何ですか?
list($a, $b) = ['valueA', 'valueB'];
echo $a; # valueA
echo $b; # valueB
Goで同じことが可能ですか? Regexp.FindStringSubmatch()
のような関数は配列を返すので、この値を別の変数に直接マップするといいでしょう。
あなたはそれを外出先で行うことはできませんが、その変数のポインタ値を利用して達成する方法があります。
関数を作成し、すべてのレシーバ変数のポインタをスライスとして渡してから、値を再割り当てします。すべての変数を渡して、この技術を使用することにより
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
は問題ではありません。
です。 'a、b、c:= s [0]、s [1]、s [2]'ではなく、それを使いますか?それは配列ではなくスライスです。 – OneOfOne
あり、組み込みの何もないですが、あなたは似た何かをするために、独自の関数を書くことができます。
func unlist(x []string) (string, string) {
return x[0], x[1]
}
a, b := unlist(values);
しかし、これはあなたが関数を記述しなければならないことを意味し、これを一般化する方法がないことを意味していあなたが必要とするすべての異なる数とタイプの議論を破壊するためのものです。
*注:この操作の一般的な名前は「非構造化割り当て」です。
アンパックの使用についてはhttp://stackoverflow.com/questions/19832189/unpack-golang-slices-on-assignmentを参照してください。リストコンストラクタは必要ありません。 –