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
Lepaskan: 2024-11-23 01:30:29
asal
734 orang telah melayarinya

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

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

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

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

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

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