Mengakses Struktur Tanpa Nama yang Diluluskan sebagai Antara Muka{} di Golang
Dalam Go, adalah mungkin untuk menentukan antara muka tanpa kaedah menggunakan sintaks antara muka{}. Walau bagaimanapun, bekerja dengan jenis yang melaksanakan antara muka sedemikian boleh menimbulkan cabaran, terutamanya apabila cuba mengakses medan struct tanpa nama.
Pertimbangkan contoh berikut di mana anda ingin menghantar struct tanpa nama sebagai parameter kepada fungsi:
<code class="go">package main import ( "fmt" "log" "time" ) type job struct { name string action func() custom interface{} } func NewJob(t string, name string, c func(), v interface{}) { job := process(t) job.name = name job.action = c job.custom = v go func() { for { job.action() time.Sleep(2 * time.Second) } }() } func Custom(name string) interface{} { for _, j := range jobs { if j.name != name { continue } return j.custom } return nil } func main() { NewJob("every 2 second", "pene", func() { t := Custom("pene") log.Println(t) }, struct { ID int }{ 1, }) }</code>
Dalam contoh ini, fungsi NewJob mengambil parameter jenis antara muka{} yang dipanggil v. Di dalam fungsi, anda menetapkan medan tersuai struct kerja kepada v. Anda kemudian melancarkan kerja dengan goroutine yang melaksanakan fungsi yang disediakan setiap dua saat. Dalam goroutine, anda mendapatkan semula medan tersuai menggunakan fungsi Tersuai dan cuba mengakses medan ID struktur tanpa nama. Walau bagaimanapun, anda akan menghadapi ralat:
t.ID undefined (type interface {} is interface with no methods)
Ini kerana jenis antara muka{} tidak mempunyai sebarang kaedah, jadi anda tidak boleh mengakses medan jenis asas secara langsung. Untuk menyelesaikan masalah ini, anda mesti terlebih dahulu "menaip menegaskan" antara muka kepada jenis yang sesuai sebelum anda boleh mengakses medannya. Dalam kes ini, anda tahu jenis asas ialah struct tanpa nama {ID int}, jadi anda boleh menaip menegaskannya seperti berikut:
<code class="go">id := v.(struct{ID int}).ID</code>
Dengan menaip menegaskan v kepada jenis struct yang betul, anda kini boleh mengakses medan ID seperti yang dijangkakan.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Medan Struktur Tanpa Nama yang Diluluskan sebagai `antara muka{}` di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!