2 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
是的,您可以使用反射在運(yùn)行時(shí)檢查它。這是一個(gè)非常簡(jiǎn)單的示例,用于打印嵌入結(jié)構(gòu)reflect.TypeOf的每個(gè)字段的類型,并打印字段是否為匿名() - 這是您要求的一個(gè)很好的指標(biāo):BarFooreflect.ValueOftrue
package main
import (
"fmt"
"reflect"
)
type Foo struct {
foo string
}
type Bar struct {
Foo
bar string
}
func main() {
test := Bar{}
t := reflect.TypeOf(test)
for i := 0; i < t.NumField(); i++ {
fmt.Print(t.Field(i).Type, " ")
fmt.Println(reflect.ValueOf(t.Field(i).Anonymous))
}
}
這是操場(chǎng)上的代碼:https: //play.golang.org/p/zNWxZUzq_RS
你不會(huì)問你到底想用這些信息做什么,所以將你指向reflect文檔以進(jìn)行更高級(jí)的使用。

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
檢查 的Anonymous字段reflect.StructField。
func embedsBaseModel(v interface{}) bool {
rt := reflect.TypeOf(v)
if rt.Kind() != reflect.Struct {
return false
}
base := reflect.TypeOf(BaseModel{})
for i := 0; i < rt.NumField(); i++ {
if sf := rt.Field(i); sf.Type == base && sf.Anonymous {
return true
}
}
return false
}
https://play.golang.com/p/-6flZcdSYwj
- 2 回答
- 0 關(guān)注
- 132 瀏覽
添加回答
舉報(bào)