Golang:是否可以在不同结构类型之间进行转换?

新手上路,请多包涵

假设我以这种方式设置了两个相似的类型:

 type type1 []struct {
    Field1 string
    Field2 int
}
type type2 []struct {
    Field1 string
    Field2 int
}

知道它们具有相同的字段,是否有直接的方法将值从 type1 写入 type2? (除了编写一个将所有字段从源复制到目标的循环)

谢谢。

原文由 Nicolas Marshall 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 341
2 个回答

对于您的具体示例,您可以轻松地将其转换为 playground

 t1 := type1{{"A", 1}, {"B", 2}}
t2 := type2(t1)
fmt.Println(t2)

原文由 OneOfOne 发布,翻译遵循 CC BY-SA 3.0 许可协议

要参考 OneOfOne 的答案,请参阅规范的 转换 部分。

它指出

非常量值 x 可以转换为类型 T 在任何这些情况下:

  • x 可分配给 T
  • x 的类型和 T 具有相同的基础类型。
  • x 的类型和 T 是未命名的指针类型,它们的指针基类型具有相同的基础类型。
  • x 的类型和 T 都是整数或浮点类型。
  • x 的类型和 T 都是复杂类型。
  • x 是一个整数或一段字节或符文, T 是一个字符串类型。
  • x 是一个字符串, T 是一段字节或符文。

第一个突出显示的案例是您的案例。两种类型都有底层类型

[]struct { Field1 string Field2 int }

基础类型定义为

如果 T 是预先声明的布尔值、数字或字符串类型之一,或者类型文字,则对应的基础类型是 T 本身。否则, T 的基础类型是 T 在其类型声明中引用的类型的基础类型。 (规格, 类型

您正在使用类型文字来定义您的类型,因此此类型文字是您的基础类型。

原文由 nemo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题