Penukaran Slice of String kepada Slice of Custom Type
Soalan:
Go prevents penukaran langsung daripada kepingan rentetan kepada kepingan jenis tersuai yang berkongsi jenis elemen asas yang sama. Mengapakah sekatan ini dilaksanakan, dan adakah terdapat alternatif untuk mengelakkan pertindihan data?
Jawapan:
Sebab Sekatan:
Sekatan ini dilaksanakan untuk mengelakkan penukaran jenis tidak sengaja antara jenis yang tidak berkaitan yang secara kebetulan mempunyai sama struktur.
Kaedah Penukaran Alternatif Menggunakan Pakej "tidak selamat":
Walaupun penukaran terus tidak dibenarkan, adalah mungkin untuk menukar kepingan secara terus tanpa menyalin menggunakan pakej yang tidak selamat. Walau bagaimanapun, pendekatan ini memerlukan sangat berhati-hati:
value := []string{"a", "b", "c"} // convert &value (type *[]string) to *[]Card via unsafe.Pointer, then deref cards := *(*[]Card)(unsafe.Pointer(&value)) firstHand := NewHand(cards)
Amaran:
Jenis penunjuk yang tidak selamat membenarkan akses memori sewenang-wenangnya, jadi ia mesti digunakan dengan penuh berhati-hati dan pemahaman tentang potensi risiko.
Syor:
Secara amnya, adalah lebih selamat untuk menyalin data hirisan ke dalam jenis tersuai yang diingini untuk mengelakkan kemungkinan ralat dan tingkah laku yang tidak ditentukan.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Sekeping Rentetan kepada Sekeping Jenis Tersuai dalam Go Without Data Duplication?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!