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
Lepaskan: 2024-12-10 12:58:14
asal
731 orang telah melayarinya

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan