ホームページ > バックエンド開発 > Golang > Reflect.MakeSlice がアドレス指定できない値を返すのはなぜですか?

Reflect.MakeSlice がアドレス指定できない値を返すのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-10 12:58:14
オリジナル
726 人が閲覧しました

Why does reflect.MakeSlice return an un-addressable value?

reflect.MakeSlice がアドレス指定できない値を返すのはなぜですか?

Reflection を使用してスライス ポインターを取得する

スライスへのポインターを取得するには、以下を使用します。リフレクション、reflect.New():

my := &My{}
myType := reflect.TypeOf(my)
slice := reflect.MakeSlice(reflect.SliceOf(myType), 10, 10)
x := reflect.New(slice.Type())
x.Elem().Set(slice)
ログイン後にコピー

を使用することを忘れないでください。 x.Interface() を使用して、実際の値の代わりにreflect.Value を関数に渡すことを防ぎます。

reflect.MakeSlice のアドレス指定不可能性について理解する

アドレス可能な値は、そのアドレスが確実にポイントしていることを保証します。意味のある場所。関数内のスタック上で行われた割り当てはこれを保証しないため、アドレス指定できません。

reflect.MakeSlice は、値を配列、構造体、または逆参照ポインターの要素としてアドレス指定せずに、ヒープ上のローカル スライスに割り当てます。 。したがって、アドレス指定できない値が返されます。

スライス ポインターが必要な理由

多くの場合、mgo の iter.All のような関数では、スライスが追加されることが多いため、ポインターが必要になります。追加するとスライスのメモリ アドレスが変更され、これを呼び出し元に伝える必要があります。

以上がReflect.MakeSlice がアドレス指定できない値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート