Rumah > Artikel > pembangunan bahagian belakang > Mengapa saya tidak boleh menggunakan pembolehubah dalam teg struct dalam Go?
Menggunakan Pembolehubah dalam Teg Struktur
Dalam Go, anda boleh menggunakan pembolehubah dalam teg struct untuk tujuan pengaturcaraan meta. Ini membolehkan anda menjana teg struct secara dinamik pada masa penyusunan.
Contoh Kerja
Pertimbangkan kod berikut:
<code class="go">type Shape struct { Type string `json:"type"` }</code>
Dalam contoh ini, rentetan literal digunakan dalam teg struct json untuk menentukan perwakilan JSON medan.
Menggunakan fmt.Sprintf
Walau bagaimanapun, gunakan fmt.Sprintf untuk membina teg struct secara dinamik tidak berfungsi. Kod berikut akan mengakibatkan ralat sintaks:
<code class="go">const ( TYPE = "type" ) type Shape struct { Type string fmt.Sprintf("json:\"%s\"", TYPE) }</code>
Sebab untuk ini ialah Go tidak membenarkan pernyataan yang menilai pada masa jalan dalam teg struct. Hanya literal rentetan masa kompilasi dibenarkan.
Mengapa Ia Tidak Dibenarkan
Menggunakan pembolehubah dalam teg struct tidak dibenarkan dalam Go kerana ia boleh membawa kepada isu prestasi. Jika nilai teg struct berubah secara dinamik, ia boleh menjejaskan tingkah laku program dengan cara yang tidak dijangka. Oleh itu, Go mengehadkan penggunaan teg struct kepada literal rentetan statik atas sebab prestasi dan ketekalan.
Atas ialah kandungan terperinci Mengapa saya tidak boleh menggunakan pembolehubah dalam teg struct dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!