Rumah >pembangunan bahagian belakang >Golang >Mengapa reflect.MakeSlice mengembalikan nilai yang tidak boleh ditangani?

Mengapa reflect.MakeSlice mengembalikan nilai yang tidak boleh ditangani?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 12:58:14726semak imbas

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

Mengapa Refleksi.MakeSlice Mengembalikan Nilai Yang Tidak Boleh Diatasi?

Mendapatkan Penunjuk Slice Menggunakan Refleksi

Untuk mendapatkan kembali penuding kepada hirisan menggunakan refleksi, gunakan 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)

Ingat untuk gunakan x.Interface() untuk mengelakkan menghantar reflect.Value dan bukannya nilai sebenar kepada fungsi anda.

Memahami Ketidakbolehalamatan dalam reflect.MakeSlice

Nilai yang boleh dialamatkan memastikan alamatnya menunjukkan ke lokasi yang bermakna. Peruntukan yang dibuat pada tindanan dalam fungsi tidak menjamin ini, oleh itu ia tidak boleh ditangani.

reflect.MakeSlice memberikan nilai kepada hirisan setempat pada timbunan tanpa menanganinya sebagai elemen tatasusunan, struct atau penunjuk yang dinyahrujuk . Oleh itu, ia mengembalikan Nilai yang tidak boleh dialamatkan.

Mengapa Memerlukan Penunjuk Slice?

Selalunya, dalam fungsi seperti iter mgo.Semuanya, penunjuk adalah perlu kerana hirisan sering dilampirkan pada. Penambahan menukar alamat memori kepingan, yang perlu dimaklumkan kepada pemanggil.

Atas ialah kandungan terperinci Mengapa reflect.MakeSlice mengembalikan nilai yang tidak boleh ditangani?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn