Dalam Golang, anda boleh mencipta struct tanpa nama dan menyerahkannya sebagai argumen kepada fungsi yang menerima jenis antara muka. Walau bagaimanapun, jika antara muka tidak mempunyai sebarang kaedah yang ditentukan, anda tidak akan dapat mengakses terus medan struct tanpa nama.
Pertimbangkan contoh kod berikut:
<code class="go">func NewJob(t string, name string, c func(), v interface{}) { // ... } func Custom(name string) interface{} { // ... } main() { gojob.NewJob("every 2 seconds", "pene", func() { t := gojob.Custom("pene") fmt.Println(t) // Prints "{1}" fmt.Println(t.Id) // Error: t.Id undefined (type interface {} is interface with no methods) }, struct { Id int }{ 1, }) }</code>
Dalam contoh ini, kami menghantar struct tanpa nama sebagai hujah v kepada NewJob. Fungsi Custom mendapatkan semula nilai tersuai yang dikaitkan dengan nama "pene" dan mengembalikannya sebagai antara muka{}.
Apabila kami cuba mengakses medan Id struct tanpa nama dalam goroutine, kami menghadapi ralat " t.Id tidak ditentukan". Ini kerana jenis antara muka{} tidak mempunyai kaedah yang ditentukan, jadi kami tidak boleh menganggapnya seperti jenis konkrit.
Untuk mengakses medan struct tanpa nama, kita perlu menaip menegaskannya kepada jenis yang serasi . Dalam kes ini, kita tahu bahawa v mengandungi struct tanpa nama dengan medan Id jenis int. Kita boleh menaip menegaskannya menggunakan sintaks berikut:
<code class="go">id := v.(struct{Id int}).Id</code>
Ini akan menukar antara muka{} nilai v menjadi struct konkrit dengan medan Id, membolehkan kami mengaksesnya secara terus.
Dengan menaip menegaskan nilai antara muka{}, kita boleh mengakses medan struct tanpa nama dan menggunakannya seperti yang diperlukan.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Medan Struktur Tanpa Nama yang Diluluskan sebagai Antara Muka Tanpa Kaedah di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!