我的问题是这样的:我有一个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)}
- 2 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消