Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menukar Sekeping Rentetan kepada Sekeping Jenis Tersuai dengan Selamat dalam Go?
Penukaran Jenis: Rentetan kepada Jenis Tersuai
Dalam Go, menukar sekeping rentetan kepada sekeping jenis tersuai boleh menjadi mencabar. Pertimbangkan contoh berikut:
package main import "fmt" type Card string type Hand []Card func NewHand(cards []Card) Hand { hand := Hand(cards) return hand } func main() { value := []string{"a", "b", "c"} firstHand := NewHand(value) fmt.Println(firstHand) }
Kod ini akan mengakibatkan ralat pengkompil:
cannot use value (type []string) as type []Card in argument to NewHand
Punca ralat ini terletak pada keputusan reka bentuk spesifikasi untuk mengelakkan penukaran tidak sengaja antara jenis yang tidak berkaitan yang secara kebetulan berkongsi struktur yang sama. Walau bagaimanapun, dalam keadaan tertentu, anda mungkin perlu menukar antara kepingan tersebut.
Penukaran Tidak Selamat
Walaupun secara teknikal tidak mustahil untuk menukar antara kepingan dengan jenis asas yang sama , pendekatan selamat melibatkan menyalin kepingan. Namun begitu, adalah mungkin untuk melakukan penukaran langsung (tanpa menyalin) menggunakan pakej yang tidak selamat:
value := []string{"a", "b", "c"} // convert &value (type *[]string) to *[]Card via unsafe.Pointer, then deref cards := *(*[]Card)(unsafe.Pointer(&value)) firstHand := NewHand(cards)
Awas
Menggunakan pakej yang tidak selamat memerlukan kewaspadaan yang melampau kerana ia membenarkan atur cara memintas sistem jenis dan mengakses memori sewenang-wenangnya. Jika penukaran adalah penting, adalah dinasihatkan untuk mempertimbangkan pilihan lain, seperti menentukan jenis baharu yang merangkumi kedua-dua jenis rentetan dan kad serta melakukan penukaran yang selamat dalam struktur tersebut.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Sekeping Rentetan kepada Sekeping Jenis Tersuai dengan Selamat dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!