Menyelidiki Kerumitan Jenis Aliasing
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 }
Seseorang mungkin terfikir mengapa langsung alias masa. Tempoh (durWithoutMethods) tidak mewarisi sebarang kaedah, manakala jenis bersarang alias (durWithMethods) memberikan akses kepada mereka. Kekeliruan ini berpunca daripada perbezaan asas antara definisi jenis dan alias jenis.
Menentukan Jenis Baharu lwn. Menamakan Semula Yang Sedia Ada
Dalam Go, pengisytiharan jenis terbahagi kepada dua kategori: taip definisi dan taip alias. Taip definisi lahirkan jenis segar dengan membenamkan satu atau lebih jenis sedia ada. Mereka mewarisi kaedah hanya daripada jenis terbenam peringkat teratas, bukan daripada jenis bersarang.
Alias jenis, sebaliknya, hanyalah singkatan yang mengikat pengecam baharu kepada jenis sedia ada. Mereka tidak mencipta jenis baharu, jadi jenis asas kekal tidak berubah. Sebarang kaedah yang dikaitkan dengan jenis asas masih boleh diakses dengan mudah melalui nama asal atau alias.
Memahami durWithMethods
Jenis durWithMethods memanjangkan jenis dur dengan berkesan dengan membenamkannya. Memandangkan dur membenamkan masa. Tempoh, ia mewarisi kaedah Tempoh, termasuk String(). Oleh itu, d.String() dalam kod berfungsi seperti yang diharapkan.
Menyingkap durWithoutMethods
Tidak seperti durWithMethods, durWithoutMethods ialah alias langsung masa.Duration. Ia tidak memanjangkan apa-apa, jadi ia hanya terdiri daripada masa primitif. Jenis tempoh. Kaedah masa. Tempoh tidak dipindahkan ke durWithoutMethods kerana ia adalah jenis yang berbeza dengan set kaedah tersendiri yang tersendiri. Oleh itu, dWM.String() tidak akan menyusun.
Atas ialah kandungan terperinci Mengapa Alias Jenis dalam Go Berkelakuan Berbeza Apabila Ia Mewarisi daripada Jenis Terbenam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!