为了账号安全,请及时绑定邮箱和手机立即绑定

将一个结构分配给“结构相同”类型的其他结构

将一个结构分配给“结构相同”类型的其他结构

Go
翻过高山走不出你 2021-05-15 11:10:59
我的问题是这样的:我有一个MyMail可以SendMail(MyMail.Mail)为其他软件包提供功能的软件包。MyMail使用该包LowLevelMail及其功能Send(LowLevelMail.Mail)实际发送邮件。MyMail.Mail和LowLevelMail.Mail相同的意义上,它们定义了“相同结构”(即同样名称和类型的字段)。SendMail(m MyMail.Mail)必须转换m到LowLevelMail.Mail使用之前Send(LowLevelMail.Mail。newmail := LowLevelMail.Mail(m)将无法正常工作。但这是可能的,因为编译器应该能够看到两个结构的字段是相同的。可能因为未导出字段而支持此方法不是一个好主意。1)我能以某种方式分配m给您newmail而无需手动完成(并且不会失去所有类型的安全性吗?)?通过手工方法会引起一些麻烦(该结构不仅由简单的类型组成,可以将其分配给其他结构)。2)是否有更好的解决方案来解决整个问题(即“我不想在我的API中使用其他包的类型,因为我不希望我的包的客户端依赖于外部API。此外部API可能会更改否则我可能会决定不再使用它。”)。更新:我错过了一个重要的要点:LowLevelMail.Mail有一个类型的字段,LowLevelMail.Address该字段也被“重新定义”MyMail为MyMail.Address。
查看完整描述

2 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

您的问题似乎是这样的:


package lowlevelmail


type Mail struct { P int; p int}


func Send(m Mail) { }


package mymail


import "lowlevelmail"


type Mail lowlevelmail.Mail


func Send(m Mail) { lowlevelmail.Send(lowlevelmail.Mail(m)) }


package main


import "mymail"


func main() {var m mymail.Mail; mymail.Send(m)}


查看完整回答
反对 回复 2021-05-17
  • 2 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信