Rumah >pembangunan bahagian belakang >Golang >Adakah Jenis Alias ​​dalam Go Mewarisi Kaedah daripada Jenis Dasarnya?

Adakah Jenis Alias ​​dalam Go Mewarisi Kaedah daripada Jenis Dasarnya?

DDD
DDDasal
2024-11-23 01:30:29681semak imbas

Do Type Aliases in Go Inherit Methods from Their Underlying Type?

Jenis Alias ​​dan Pewarisan Kaedah

Pertimbangkan coretan kod berikut:

package main

import (
    "fmt"
    "time"
)

type dur struct {
    time.Duration
}

type durWithMethods dur

type durWithoutMethods time.Duration

func main() {
    var d durWithMethods // works ??
    fmt.Println(d.String())
    
    var dWM durWithoutMethods
    fmt.Println(dWM.String()) // doesn't compile
}

Kod ini menunjukkan cara yang berbeza untuk mencipta jenis alias dan kesannya pada kaedah warisan.

Type Alias ​​vs. Type Definition

Dalam Go, terdapat dua jenis jenis pengisytiharan: alias dan takrifan.

  • Jenis alias: Mencipta nama baharu untuk jenis sedia ada tanpa mengubah strukturnya atau tingkah laku.
  • Takrifan jenis: Mencipta jenis baharu dengan set medan dan kaedahnya sendiri.

Pewarisan Kaedah dengan Alias ​​Jenis

Jenis alias durWithMethods mencipta jenis baharu yang mewarisi kaedah daripada asasnya jenis, dur, yang seterusnya membenamkan masa. Tempoh. Oleh itu, durWithMethods mempunyai akses kepada kaedah String() dari masa.Duration.

fmt.Println(d.String()) // works

Sebaliknya, jenis alias durWithoutMethods hanya menukar nama masa.Duration. Sejak masa. Tempoh adalah jenis mentah, ia tidak mempunyai kaedah. Oleh itu, durWithoutMethods tidak mempunyai kaedah String().

fmt.Println(dWM.String()) // doesn't compile

Taip Alias ​​dengan Jenis Asas Yang Sama

Alias ​​jenis benar, yang hanya menamakan semula jenis sedia ada , akan kelihatan seperti ini:

type sameAsDuration = time.Duration

Dalam kes ini, sameAsDuration mempunyai kaedah yang sama sebagai masa.Tempoh kerana ia mewakili jenis yang sama.

var sad sameAsDuration
fmt.Println(sad.String()) // works

Oleh itu, kekeliruan timbul disebabkan oleh perbezaan halus antara alias jenis dan definisi jenis, dan kesannya terhadap pewarisan kaedah. Alias ​​jenis mengekalkan kaedah jenis asasnya, manakala definisi jenis mencipta jenis baharu dengan set kaedahnya sendiri.

Atas ialah kandungan terperinci Adakah Jenis Alias ​​dalam Go Mewarisi Kaedah daripada Jenis Dasarnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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