当前位置: > > > > 如何断言类型是指向golang中的接口的指针
来源:stackoverflow
2024-04-20 11:09:24
0浏览
收藏
“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《如何断言类型是指向golang中的接口的指针》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!
问题内容
我断言指向结构体的指针的类型正在golang中实现一个接口,并且在下面的代码示例中有些东西我不明白:
package main import ( "fmt" ) type MyStruct struct { Name string } func (m *MyStruct) MyFunc() { m.Name = "bar" } type MyInterface interface { MyFunc() } func main() { x := &MyStruct{ Name: "foo", } var y interface{} y = x _, ok := y.(MyInterface) if !ok { fmt.Println("Not MyInterface") } else { fmt.Println("It is MyInterface") } }
我期望执行 _, ok := y.(*myinterface)
因为 y
是指向 mystruct
的指针。为什么我不能断言它是一个指针?
正确答案
类型断言用于查找接口中包含的对象的类型。因此,y.(myinterface)
可以工作,因为接口 y
中包含的对象是 *mystruct
,并且它实现了 myinterface
。但是, *myinterface
不是接口,而是指向接口的指针,因此您断言的是 y
是否是 *myinterface
,而不是 y
是否实现 myinterface
。只有满足以下条件,这才会成功:
var x MyInterface var y interface{} y=&x _, ok := y.(*MyInterface)
以上就是《如何断言类型是指向golang中的接口的指针》的详细内容,更多关于的资料请关注公众号!