字符串切片到自定义类型切片的转换
问题:
Go 阻止从字符串切片到共享相同基础元素类型的自定义类型切片的直接转换。为什么要实施此限制,是否有其他方法可以避免数据重复?
答案:
限制原因:
实施此限制是为了防止恰好具有相同属性的不相关类型之间发生意外类型转换
使用“不安全”包的替代转换方法:
虽然不允许直接转换,但可以使用不安全包直接转换切片而不进行复制。然而,这种方法需要极其谨慎:
value := []string{"a", "b", "c"} // convert &value (type *[]string) to *[]Card via unsafe.Pointer, then deref cards := *(*[]Card)(unsafe.Pointer(&value)) firstHand := NewHand(cards)
警告:
unsafe.Pointer 类型允许任意内存访问,因此必须极其小心地使用它对潜力的理解
建议:
通常,将切片数据复制到所需的自定义类型以避免潜在的错误和未定义的行为更安全。
以上是如何在 Go 中将字符串切片转换为自定义类型切片而不重复数据?的详细内容。更多信息请关注PHP中文网其他相关文章!