我的问题是这样的:我有一个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
。
慕运维8079593
相关分类