我正在尝试在我的代码库中使用更多接口,用于我正在编写的游戏服务器,并了解高级概念以及何时应该使用(我认为)。在我的情况下,我使用它们将我的包彼此分离,以及使测试更容易。
我的问题归结为我有一个具有ptr接收方法的结构。我正在通过接口将此结构传递给另一个函数,就像在此playground中一样。我很困惑为什么带有类型接口的参数的函数可以接受实现该接口的某个地址。为什么不func something(f *face)
,*interface
的目的是什么?
答案 0 :(得分:1)
"类型接口的参数不能接受实现该接口的内容的地址"。恰恰相反。
你的具体foo 不实现界面。它没有。
只有*foo
与Go中的其他类型相同。
您只能 将*foo
分配给face类型的变量。 (好吧,Go中有一些糖可能会让你对面部有一个可寻址的foo,但这里指针的过程是自动的。)
查看语言规范和类型系统。