登录
首页 >  Golang >  Go问答

如何断言类型是指向golang中的接口的指针

来源:stackoverflow

时间:2024-04-20 11:09:24 307浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习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中的接口的指针》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>