Soalan: Dalam konteks sistem templat, bagaimana saya boleh mendapatkan pembolehubah nama berdasarkan nilainya semata-mata menggunakan pantulan? Ini akan membolehkan saya menggantikan nilai pemegang tempat dalam templat dengan nama pembolehubah sebenar.
Menggunakan Refleksi:
Saya cuba menggunakan pantulan untuk mendapatkan semula nama pembolehubah, tetapi Saya tidak berjaya. Inilah kod yang saya cuba:
onevar := "something" other := "something else" var msg string sa := []string{onevar, other} for _, v := range sa { vName := reflect.TypeOf(v).Name() // Attempt to get the variable name vName = fmt.Sprintf("{{%s}}", vName) // Prefix the name with "{{" and "}}" msg = strings.Replace(msg, vName, v, -1) // Replace the placeholder with the actual value }
Pendekatan ini tidak menghasilkan hasil yang diingini kerana slice sa hanya mengandungi nilai pembolehubah, bukan nama pembolehubah.
Jawapan:
Refleksi tidak boleh digunakan untuk mendapatkan semula nama pembolehubah dalam senario ini. Potongan sa mengandungi nilai pembolehubah, bukan nama pembolehubah itu sendiri. Untuk mencapai matlamat anda untuk menggantikan ruang letak dengan nama berubah-ubah, adalah disyorkan untuk menggunakan peta dan bukannya sekeping. Peta boleh mengaitkan nama pembolehubah dengan nilainya, membolehkan penggantian yang cekap dan tepat.
Atas ialah kandungan terperinci Bolehkah Reflection Mendapatkan Nama Pembolehubah daripada Nilainya dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!