如何将结构转换为具有较少字段的不同结构
来源:stackoverflow
时间:2024-04-13 13:27:33 167浏览 收藏
本篇文章给大家分享《如何将结构转换为具有较少字段的不同结构》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。
我正在尝试将 big 类型的结构复制为 small 类型,而不显式创建具有相同字段的 small 类型的新结构。
我尝试过搜索其他类似的问题,例如 this 和 this,但仅当结构具有相同的字段时,不同结构类型之间的所有转换才会发生。
这是我尝试做的示例:
// big has all the fields that small has including some new ones. type big struct { a int b string c float d byte } type small struct { a int b string } // this is the current solution which i hope to not use. func convertfrombigtosmall(big big) small { return small{ a: big.a, b: big.b, } }
我希望能够做这样的事情,但它不起作用:
big := Big{} small := Small(big)
是否有一种方法可以在不使用 convert
函数的情况下在 big
到 small
之间进行转换(甚至反之亦然)?
解决方案
对此没有内置支持。如果您确实需要这个,您可以编写一个使用反射来复制字段的通用函数。
或者你可以重新设计。如果 big
是 small
加上一些其他附加字段,为什么不在 big
中重用 small
?
type small struct { a int b string } type big struct { s small c float d byte }
然后,如果您有一个 big
结构,那么您也有一个 small
:big.s
。如果您有 small
并且需要 big
:big{s:small}
。
如果您担心失去较短字段名称的便利性或不同的编组结果,请使用嵌入而不是命名字段:
type Big struct { Small // Embedding C float D byte }
那么这些也是有效的:big.a
、big.b
。但如果您需要 small
值,则可以使用非限定类型名称作为字段名称来引用嵌入字段,例如big.small
(参见 Golang embedded struct type)。同样,要从 small
创建 big
:big{small:small}
。
唯一的选择是手动执行此操作,就像您所做的那样。无论您是否将其包装在函数中,都是品味/环境的问题。
今天关于《如何将结构转换为具有较少字段的不同结构》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
-
502 收藏
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
139 收藏
-
204 收藏
-
325 收藏
-
477 收藏
-
486 收藏
-
439 收藏
-
357 收藏
-
352 收藏
-
101 收藏
-
440 收藏
-
212 收藏
-
143 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习