Bagaimana untuk mengakses sifat subjenis dalam objek jenis induk dalam Go?

王林
Lepaskan: 2024-02-09 17:45:08
ke hadapan
765 orang telah melayarinya

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

Saya menjangkakan output ini:

1: Audio 14 seconds
2: Image 1111x9989
3: Image 1234x5678
Salin selepas log masuk

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

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!

Label berkaitan:
sumber:stackoverflow.com
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!