Apakah Perbezaan Antara Jenis Aliasing dan Definisi Jenis dalam Go?

Patricia Arquette
Lepaskan: 2024-11-10 22:41:03
asal
386 orang telah melayarinya

What's the Difference Between Type Aliasing and Type Definition in Go?

Type Aliasing vs. Type Definition in Go

Dalam Go, terdapat dua cara untuk menentukan jenis baharu: taip aliasing dan taip definisi. Walaupun mekanisme ini mungkin kelihatan serupa pada pandangan pertama, terdapat perbezaan yang halus tetapi ketara di antara mereka.

Pengalian Jenis (jenis A = rentetan)

Pengalian jenis mencipta alias untuk jenis sedia ada. Ini bermakna nama jenis baharu (A dalam kes ini) menjadi sinonim untuk jenis asal (rentetan). Apabila menggunakan alias, semua sifat dan kaedah jenis asal diwarisi oleh alias. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa anda tidak boleh mentakrifkan kaedah baharu pada alias jenis.

Definisi Jenis (rentetan jenis A)

Takrifan jenis, sebaliknya, mencipta jenis baharu sama sekali. Walaupun ia mungkin berkongsi perwakilan asas yang sama seperti jenis lain (seperti rentetan dalam kes ini), ia adalah jenis yang berbeza dengan set sifat dan kaedahnya sendiri. Takrifan jenis membolehkan anda menentukan kaedah tersuai pada jenis baharu dan pantulan akan mengecam jenis baharu secara berasingan daripada jenis asas.

Contoh

Untuk menggambarkan perbezaan, pertimbangkan kod berikut:

package main

import (
    "fmt"
)

type A = string
type B string

func (b B) CustomMethod() {
    fmt.Println("Custom method called on B")
}

func main() {
    var a A = "hello"
    var b B = "hello"
    fmt.Printf("a is %T\nb is %T\n", a, b)
    b.CustomMethod() // Legal
    // a.CustomMethod() // Compile-time error
}
Salin selepas log masuk

Dalam contoh ini, jenis A ialah alias untuk rentetan, jadi a ialah rentetan jenis. Jenis B ialah jenis baharu yang ditakrifkan daripada rentetan, yang membolehkan kami mentakrifkan kaedah tersuai padanya (CustomMethod). Penyemak jenis akan mengenal pasti b dengan betul sebagai jenis B dan kaedah CustomMethod boleh digunakan padanya. Walau bagaimanapun, cubaan menggunakan CustomMethod pada a akan mengakibatkan ralat masa kompilasi kerana alias jenis tidak mewarisi kaedah.

Atas ialah kandungan terperinci Apakah Perbezaan Antara Jenis Aliasing dan Definisi Jenis dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan