Flamingo框架运行出现Struct not assignable to Interface报错如何解决?
问题原因
- 首要原因是代码存在拼写笔误:你在
some_struct.go中定义someMethod方法时,接收者类型写成了*SomeStuct,比正确的结构体名SomeStruct少了字母r。这一错误会导致你实际上并未给SomeStruct类型实现someMethod方法,SomeStruct自然不满足SomeInterface的实现要求,触发赋值失败报错。当你移除接口内的方法后,SomeInterface变为空接口,Go中所有类型默认都实现了空接口,因此运行正常。 - 如果排除拼写错误的场景,问题则来源于Go的接口实现规则:如果方法的接收者为指针类型
*T,那么只有指针类型*T实现了对应接口,值类型T并未实现。此时如果绑定逻辑误将值类型和接口绑定,就会触发类型不匹配报错。
解决方案
- 先修正拼写错误,将
some_struct.go中方法的接收者类型改为正确的*SomeStruct,修正后代码如下:
package something type SomeStruct struct { } func(s *SomeStruct) someMethod() { }
- 如果修正拼写后仍然报错,可以调整绑定写法,明确绑定指针类型的实现:
func (*Module) Configure(injector *dingo.Injector) { // 方式1:直接用&语法声明指针 injector.BindMulti(new(SomeInterface)).To(&SomeStruct{}) // 方式2:用Provider明确返回接口实现类型 // injector.BindMulti(new(SomeInterface)).ToProvider(func() SomeInterface { // return &SomeStruct{} // }) }
内容的提问来源于stack exchange,提问作者besrabasant
相关产品推荐
相关产品推荐

