当前位置: > > > > 如何断言类型是指向golang中的接口的指针
如何断言类型是指向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中的接口的指针》的详细内容,更多关于的资料请关注米云公众号!
