Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh menyimpan nilai rentetan dan integer dalam medan struct dalam Go?
Taip Penukaran dan Antara Muka dalam Medan Struct
Soalan:
Dalam program Go, struct digunakan untuk mentakrifkan jenis data yang ditakrifkan pengguna yang menggabungkan berbilang medan pelbagai jenis. Walau bagaimanapun, bagaimana jika anda mahu medan dalam struct yang boleh menyimpan nilai rentetan dan integer?
Jawapan:
Sistem jenis Go tidak menyokong jenis jumlah, yang mana membenarkan satu medan untuk menyimpan nilai berbilang jenis. Walau bagaimanapun, terdapat penyelesaian menggunakan antara muka. Antara muka mentakrifkan satu set kaedah dan sebarang jenis yang melaksanakan kaedah tersebut boleh digunakan sebagai antara muka itu.
Untuk melaksanakan penyelesaian ini, pertimbangkan coretan berikut:
type Input interface { ToString() string ToInteger() int } type TestCase struct { Input Input IsValid bool }
Dalam contoh ini , kami telah mentakrifkan antara muka Input dengan dua kaedah, ToString() dan ToInteger(), yang digunakan untuk menukar nilai Input kepada rentetan atau integer. Struktur TestCase kini mempunyai medan Input yang menerima sebarang jenis yang melaksanakan antara muka Input.
Untuk menggunakan penyelesaian ini, anda boleh menentukan jenis tersuai yang melaksanakan antara muka Input:
type StringInput string func (s StringInput) ToString() string { return string(s) } func (s StringInput) ToInteger() int { return 0 // Error handling omitted for brevity } type IntegerInput int func (i IntegerInput) ToString() string { return strconv.Itoa(int(i)) } func (i IntegerInput) ToInteger() int { return int(i) }
Dengan jenis tersuai ini, anda boleh mencipta TestCase dan menetapkan nilai kepada medan Input:
var testCase = TestCase{Input: StringInput("Hello"), IsValid: true} fmt.Println(testCase.Input.ToString()) // Prints "Hello" fmt.Println(testCase.Input.ToInteger()) // Throws error
Sementara pendekatan ini membolehkan anda menyimpan kedua-dua nilai rentetan dan integer dalam medan yang sama, ia memerlukan pelaksanaan jenis tersuai dan kaedah penukaran, yang mungkin tidak sesuai untuk semua kes.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menyimpan nilai rentetan dan integer dalam medan struct dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!