


Bagaimana untuk mengakses sifat subjenis dalam objek jenis induk dalam Go?
Dalam bahasa Go, kita sering menghadapi situasi di mana kita perlu mengakses sifat subjenis dalam objek jenis induk. Ini mungkin kerana kami menggunakan struktur bersarang semasa mentakrifkan struktur. Walau bagaimanapun, oleh kerana tiada konsep warisan dalam bahasa Go, sifat subjenis tidak boleh diakses terus melalui objek jenis induk. Jadi, bagaimana untuk melaksanakan keperluan ini dalam Go? Di bawah, saya akan memperkenalkan anda kepada beberapa kaedah yang biasa digunakan.
Kandungan soalan
Saya sedang mencipta storan fail. Saya cuba mencipta pelbagai jenis fail. Untuk mensimulasikan ini saya menggunakan kod:
<code>package main import ( "fmt" "time" ) type File interface{} type Audio struct { File Duration time.Duration } type Image struct { File Width uint Height uint } func main() { var files = map[string]File{ "1": Audio{ Duration: 14 * time.Second, }, "2": Image{ Height: 9989, Width: 1111, }, "3": Image{ Width: 1234, Height: 5678, }, } for k, v := range files { switch v.(type) { case Audio: fmt.Printf("%s: Audio %d seconds", k, v.Duration / time.Second) case Image: fmt.Printf("%s: Image %dx%d", k, v.Width, v.Height) } } } </code>
Saya menjangkakan output ini:
1: Audio 14 seconds 2: Image 1111x9989 3: Image 1234x5678
Tetapi pengkompil Go memberi saya ralat ini:
./main.go:38:44: v. Tempoh tidak ditentukan (jenis Fail tidak mempunyai medan atau kaedah Tempoh)
./main.go:40:39: v.Width is undefined (type File has no field or method Width)
./main.go:40:48: v.Ketinggian tidak ditentukan (jenis Fail tidak mempunyai medan atau kaedah Ketinggian)
Bagaimana untuk membetulkan ralat?
Penyelesaian
switch v := v.(type) {
akan mengisytiharkan v
baharu dengan jenis yang anda jangkakan.
Atas ialah kandungan terperinci Bagaimana untuk mengakses sifat subjenis dalam objek jenis induk dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Apabila menggunakan SQL.Open, mengapa DSN tidak melaporkan ralat? Dalam bahasa Go, sql.open ...
