我想從Go結構中獲得嵌入式類型。下面是一個演示這個例子的程序。有沒有辦法編寫myfunc()
而沒有列舉可以輸入的每種類型? https://play.golang.org/p/5wp14O660m如何從GO結構中獲取嵌入式類型?
package main
import (
"fmt"
)
type ObjectMeta struct {
Name string
Namespace string
}
type A struct {
ObjectMeta
X string
}
type B struct {
ObjectMeta
X string
}
func myfunc(v interface{}) ObjectMeta {
switch u := v.(type) {
case *A:
return u.ObjectMeta
case A:
return u.ObjectMeta
case *B:
return u.ObjectMeta
case B:
return u.ObjectMeta
}
panic("No matching type")
}
func main() {
fmt.Println(myfunc(&A{}))
var v interface{} = &A{}
fmt.Println(v.(*ObjectMeta))
}
ObjectMeta
,A
,B
結構在外部項目存在。我無法控制他們。
不是,它的太短精靈作爲答案。記住:'interface {}'什麼也沒說。這就是爲什麼你必須做所有的工作, – Volker
好的。那麼請回答這個問題? – codefx
難道你不能只是讓所有的類型實現一個方法來返回'ObjectMeta'? – JimB