Mengakses Reflect.Type Tanpa Penciptaan Struktur Fizikal
Dalam Go, memuatkan penyelesaian masalah secara dinamik memerlukan mengakses jenis struct tanpa menciptanya secara fizikal . Walaupun penyelesaian sedia ada mewajibkan penciptaan struktur dan pensifaran sebelum pendaftaran jenis, pendekatan yang lebih cekap wujud.
Seseorang boleh memanfaatkan reflect.TypeOf((*Struct)(nil)).Elem() operasi. Dengan mencipta penunjuk sifar, peruntukan ruang dielakkan. Kaedah Elem mendapatkan semula jenis elemen daripada penunjuk, tatasusunan, kepingan, saluran dan peta.
Sebagai contoh, pertimbangkan SolutionRegistry yang disediakan yang membenarkan pemuatan dinamik penyelesai untuk masalah "Projek Euler". Untuk mendaftarkan jenis struct, pelaksanaan semasa memerlukan penciptaan dan pemulaan struct.
<code class="go">type DummySolution struct { data [100 * 1024 * 1024 * 1024]uint8 }</code>
Untuk mengoptimumkan proses ini, bukannya mencipta contoh DummySolution, seseorang boleh menggunakan reflect .TypeOf((*DummySolution)(nil)).Elem() untuk mendapatkan jenisnya:
<code class="go">func Register(sol Solution) { solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem()) }</code>
Teknik ini secara berkesan menghapuskan keperluan untuk instantiasi struktur fizikal sambil mendaftarkan jenisnya untuk pemuatan dinamik masa hadapan .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Jenis Go Struct Tanpa Membuat Contoh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!