Mendapatkan Jenis Tersuai untuk JSON Unmarshaling dalam Go
Apabila bekerja dengan jenis tersuai dalam Go, selalunya perlu untuk melaksanakan fungsi UnmarshalJSON untuk mendayakan penukaran automatik daripada JSON kepada jenis yang diingini. Walau bagaimanapun, cabaran timbul apabila jenis itu diperoleh daripada nilai skalar. Artikel ini meneroka penyelesaian untuk mengatasi isu ini.
Pertimbangkan contoh jenis PersonID yang mewakili pemalar integer subtaip untuk mengenal pasti individu. Kami ingin melanjutkan fungsi jenis ini untuk menyokong penukaran automatik daripada rentetan JSON. Melaksanakan UnmarshalJSON untuk jenis ini menjadi sukar kerana ia bertujuan untuk mengembalikan atau mengubah suai nilai skalar secara langsung, manakala UnmarshalJSON menjangkakan struct untuk pengubahsuaiannya.
Untuk menyelesaikan masalah ini, kami menggunakan pendekatan penerima penunjuk. Dengan menggunakan penerima penunjuk, perubahan yang dibuat dalam kaedah UnmarshalJSON dicerminkan pada nilai asal. Berikut ialah contoh pelaksanaan UnmarshalJSON yang diubah suai:
func (intValue *PersonID) UnmarshalJSON(data []byte) error { var s string if err := json.Unmarshal(data, &s); err != nil { return err } *intValue = Lookup(s) return nil }
Dalam pelaksanaan ini, teks JSON dinyahmarshall menjadi pembolehubah rentetan sebelum dihantar ke fungsi Carian, yang menukar rentetan kepada nilai PersonID yang dikehendaki. Nilai ini kemudiannya diberikan kepada intValue penuding.
Selain itu, untuk mengelakkan konflik antara teg JSON dan data JSON, pastikan teg dalam struct MyType sepadan dengan nama medan dalam JSON. Dengan mengikuti langkah ini, anda boleh berjaya melaksanakan UnmarshalJSON untuk jenis skalar terbitan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan JSON Unmarshaling Tersuai untuk Jenis Skalar Terbitan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!