Rumah >pembangunan bahagian belakang >Golang >Bolehkah Reflection Mendapatkan Nama Pembolehubah daripada Nilainya dalam Go?

Bolehkah Reflection Mendapatkan Nama Pembolehubah daripada Nilainya dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-26 11:45:111052semak imbas

Can Reflection Retrieve a Variable's Name from Its Value in Go?

Bolehkah saya Mendapatkan Nama Pembolehubah daripada Nilainya?

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!

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