2

(例)でスライスを作成すると

mySlice := make([]int, 5, 10)

次に、タイプの配列が[10]int静かに作成され、最初の 5 つの int を「見る」スライスを受け取るとします。

(そうですか? Go のドキュメントではこのように表現されていませんが、スライスは常にどこかに基礎となる配列を持っている必要があるため、他の方法でどのようになるかわかりません。)

したがって、上記は次の省略形だと思います。

var myArray [10]int
mySlice := myArray[0:5]

しかし、最初の方法を使用すると、配列へのハンドルがありません。スライスから取得する方法はありますか?

4

2 に答える 2

3

安全でないポインター トリックを使用しない限り、スライスから配列を取得する方法はありません。

于 2013-08-31T15:49:04.510 に答える
2

どのような「ハンドル」が必要かわかりませんが、Go では配列は値渡しされます。したがって、配列をパラメーターとして受け取る関数がある場合は、データをスライスから配列にコピーして、配列を渡すことができます。配列は、関数に渡すとコピーされます。

配列を操作したい独自のコードの場合、配列で行うすべてのことをスライスで行うことができます。

unsafe がないとできない唯一のことは、配列へのポインターを作成することですが、unsafe を使用すると簡単に作成できます。

arrayPtr := (*[10]int)(unsafe.Pointer(&mySlice[0]))
于 2013-08-31T17:02:02.000 に答える