go struct结构体之间的转换

这篇具有很好参考价值的文章主要介绍了go struct结构体之间的转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文链接:https://www.zhoubotong.site/post/94.html
说下背景吧,大家在开发中可能在不同的目录(package)下定义了相同的struct(属性参数完全一样如名字、个数和类型),在方法调用传参数的时候,可能是用到了其中某一个struct的引用。

那么这里就牵扯到相互间的转换:直接上demo:

package main

import "fmt"

type PackgeAResp struct { // 比如这里是其他目录xxx 下定义的struct
    ID   int    `gorm:"column:id;" json:"taskId" form:"taskId"`
    Name string `gorm:"column:name;" json:"name" form:"name"`
}

type PackgeBResp struct { // 比如这里是其他目录yyy 下定义的struct
    ID   int    `gorm:"column:id;" json:"taskId" form:"taskId"`
    Name string `gorm:"column:name;" json:"name" form:"name"`
}

func demo(info *PackgeBResp) { // 定义参数为目录yyy 下定义的struct
    fmt.Printf("%#v", info)
}
func main() {
    info := &PackgeAResp{ID: 1, Name: "test"}
    demo(info)
    //demo(&PackgeBResp{ID: info.ID, Name: info.Name}) //通过这样可以实现,但是比较lower的就是重新赋值,参数多的情况下你的一个个写入
}

显然类型不匹配:cannot use info (variable of type *PackgeAResp) as *PackgeBResp value in argument to demo

两个相同struct是可以强转换的:

info := &PackgeAResp{ID: 1, Name: "test"}
demo((*PackgeBResp)(info))

注意:两个结构体需要有完全相同的字段(名字、个数和类型)。

再举个例子:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

type Employee struct {
    Name string
    Age  int
}

func main() {
    var p Person = Person{Name: "John", Age: 30}
    var e Employee = Employee{Name: "Babala", Age: 18}
    p = Person(e) // 把 e 转成Person
    fmt.Println(p)
}
//输出 {Babala 18}

当然我们还可以通过结构体进行type重新定义(相当于取别名)的方式实现,Golang认为是新的数据类型,但是相互间是可以强转的:文章来源地址https://www.toymoban.com/news/detail-416392.html

type Person struct {
    Name string
    Age  int
}

type Employee struct {
    Name string
    Age  int
}
type E Employee

func main() {
    var s1 Person = Person{Name: "John", Age: 30}
    var s2 E = E{Name: "Babala", Age: 18}
    s1 = Person(s2) // s2 转成Person结构体
    fmt.Println(s1) //{Babala 18}
}

到了这里,关于go struct结构体之间的转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • go 笔记 第九章 结构体 struct 声明和使用

    package main import “fmt” type qm struct { name string age int hobby []string home } type home struct { address string } // 给结构体声明方法 func (q qm) song(name string) (ret string) { ret = “惊雷” fmt.Printf(“%v—%v–%v”, q.name, name, q.age) fmt.Println() return ret } func (h home) open() { fmt.Println(“open”) } func main() { v

    2024年02月16日
    浏览(44)
  • CAP结构体之字节对齐

    🍅 我是 蚂蚁小兵 ,专注于车载诊断领域,尤其擅长于对CANoe工具的使用 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】 🍅 玩转CANoe,博客目录大全,点击跳转👉 CAPL为什么也要理解字节对齐呢? 一般情况下,我们在定义/使用结构体的情

    2024年02月12日
    浏览(45)
  • 2.14 PE结构:地址之间的转换

    在可执行文件PE文件结构中,通常我们需要用到地址转换相关知识,PE文件针对地址的规范有三种,其中就包括了 VA , RVA , FOA 三种,这三种该地址之间的灵活转换也是非常有用的,本节将介绍这些地址范围如何通过编程的方式实现转换。 如下是三种格式的异同点: VA(Vi

    2024年02月09日
    浏览(59)
  • 【原文链接】Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction

    原文链接:https://openaccess.thecvf.com/content/CVPR2023/papers/Huang_Tri-Perspective_View_for_Vision-Based_3D_Semantic_Occupancy_Prediction_CVPR_2023_paper.pdf 体素表达需要较大的计算量和特别的技巧(如稀疏卷积),BEV表达难以使用平面特征编码所有3D结构。 本文提出三视图(TPV)表达3D场景。为得到空间

    2024年01月23日
    浏览(49)
  • Go Struct

    结构体(简称struct)用于创建不同数据类型的成员集合,放入一个单一的变量中。虽然数组用于将相同数据类型的多个值存储在单一变量中,但结构体用于将不同数据类型的多个值存储在单一变量中。结构体对于将数据组合在一起以创建记录非常有用。 声明结构体 要在Go中声

    2024年02月09日
    浏览(33)
  • struct嵌入(go 继承)

    在这段代码中,定义了两个结构体 A 和 B ,其中 B 包含了 A 的所有字段和方法。 B 结构体还新增了一个 String() 方法,用于返回 B 结构体中的 name 字段。 在 String() 方法中,通过 b.name 访问了 B 结构体中匿名字段 A 中的 name 字段。这是因为在 Go 中,如果结构体中包含了一个或多

    2024年02月11日
    浏览(42)
  • go 语言(九)----struct

    定义一个结构体 结构体使用 结构体传参

    2024年01月20日
    浏览(40)
  • 掌握Go语言:Go语言类型转换,解锁高级用法,轻松驾驭复杂数据结构(30)

    在Go语言中,类型转换不仅仅局限于简单的基本类型之间的转换,还可以涉及到自定义类型、接口类型、指针类型等的转换。以下是Go语言类型转换的高级用法详解: Go语言类型转换的高级用法 1. 自定义类型之间的转换 在Go语言中,可以使用类型别名或自定义类型来创建新的

    2024年04月09日
    浏览(69)
  • python学习笔记——矩阵跟向量间的转换

    2、向量转矩阵:reshape() 可以将一维数据转为多维数据

    2024年02月16日
    浏览(43)
  • 【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags

    在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以有不同的类型和名称。 除了这些基本信息之外,Go 还提供了 struct tags,它可以用来指定 struct 中每个字段的元信息。 在本文中,我们将探讨为什

    2024年02月15日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包