Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengakses sifat subjenis dalam objek jenis induk dalam Go?

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

王林
王林ke hadapan
2024-02-09 17:45:08785semak imbas

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Tukar nilai semasa marshallingArtikel seterusnya:Tukar nilai semasa marshalling