首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何断言类型是指向golang中接口的指针。

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

Stack Overflow用户
提问于 2022-03-30 19:28:10
回答 1查看 130关注 0票数 2

我断言指向struct的指针的类型是在golang中实现接口,在下面的代码示例中有一些东西我不理解:

代码语言:javascript
复制
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的指针。为什么我不能断言它是一个指针?

EN

Stack Overflow用户

回答已采纳

发布于 2022-03-30 19:33:40

类型断言用于查找接口中包含的对象的类型。因此,y.(MyInterface)可以工作,因为接口y中包含的对象是一个*MyStruct,并且它实现了MyInterface。但是,*MyInterface不是接口,它是接口的指针,所以您要断言的是y是否是*MyInterface,而不是y是否实现MyInterface。只有在以下情况下才能成功:

代码语言:javascript
复制
var x MyInterface
var y interface{}
y=&x
_, ok := y.(*MyInterface)
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71683078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档