[英]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.