Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah saya boleh menyimpan nilai rentetan dan integer dalam medan struct dalam Go?

Bagaimanakah saya boleh menyimpan nilai rentetan dan integer dalam medan struct dalam Go?

DDD
Lepaskan: 2024-11-28 00:14:11
asal
937 orang telah melayarinya

How can I store both string and integer values in a struct field in 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
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan