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.
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.
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!