簡體   English   中英

如何斷言類型是指向golang中接口的指針

[英]How to assert type is a pointer to an interface in 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的指針。 為什么我不能斷言它是一個指針?

類型斷言用於查找接口中包含的 object 的類型。 所以, y.(MyInterface)有效,因為接口y中包含的 object 是一個*MyStruct ,它實現MyInterface 但是, *MyInterface不是一個接口,它是一個指向接口的指針,所以你要斷言的是y是否是一個*MyInterface ,而不是y是否實現MyInterface 這只有在以下情況下才會成功:

var x MyInterface
var y interface{}
y=&x
_, ok := y.(*MyInterface)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM