Go 中结构体切片之间的类型转换
在 Go 中使用结构体切片时,了解不同结构体切片之间的差异非常重要类型。在本例中,我们有以下类型:
问题1:[]struct{Name string} 和 []struct{Name string json:"a.name" } 不同吗?
是的,它们是不同的,因为 JSON 标签 json:"a.name"。 Go 规范明确规定,只有当两个结构体类型具有相同的字段、名称、类型、 和 标签时,它们才是相同的。
问题 2: ListSociete 和 []struct{Name string} 不同吗?
是的,它们不同,因为 ListSociete 是自定义类型,而 []struct{Name string} 是匿名类型。它们也有不同的字段名称。
_解决方案:
这些类型之间的转换有两种选项:
方案一:通过迭代进行复制
此方法安全可靠,但需要显式复制:
<code class="go">ls := make(ListSociete, len(res)) for i := 0; i < len(res); i++ { ls[i].Name = res[i].Name } return ls, nil</code>
方案二:不安全转换
此不安全方法直接转换底层数据结构:
<code class="go">return *(*ListSociete)(unsafe.Pointer(&res)), nil</code>
此方法应谨慎使用,因为它可能会导致意外行为.
_游乐场示例:http://play.golang.org/p/lfk7qBp2Gb
以上是如何在 Go 中的结构体切片之间安全转换:类型转换和最佳实践指南的详细内容。更多信息请关注PHP中文网其他相关文章!