【发布时间】:2012-09-14 07:58:05
【问题描述】:
我的问题是这样的:我有一个MyMail 包,它为其他包提供了一个函数SendMail(MyMail.Mail)。 MyMail 使用包LowLevelMail 及其函数Send(LowLevelMail.Mail) 来实际发送邮件。 MyMail.Mail 和 LowLevelMail.Mail 在定义“相同结构”(即名称和类型相同的字段)的意义上是相同的。
SendMail(m MyMail.Mail) 必须在使用Send(LowLevelMail.Mail 之前将m 转换为LowLevelMail.Mail。 newmail := LowLevelMail.Mail(m) 不起作用。但这可能是可能的,因为编译器应该能够看到两个结构的字段是相同的。由于未导出字段,因此支持这一点可能不是一个好主意。
1) 我能否以某种方式将m 分配给newmail 而无需手动操作(并且不会失去所有类型安全性?)?手动方法会带来一些痛苦(结构不仅仅包含可以分配给其他结构的简单类型)。
2) 整个问题是否有更好的解决方案(即“我不想在我的 API 中使用其他包的类型,因为我不希望我的包的客户端依赖于外国 API。这个外国API 可能会改变,或者我可能会在某个时候决定不再使用它。”)。
更新:我错过了一个重点:LowLevelMail.Mail 有一个 LowLevelMail.Address 类型的字段,它也在 MyMail 中“重新定义”为 MyMail.Address。
【问题讨论】:
标签: go