gpt4 book ai didi

go - 在运行时检查结构是否具有结构嵌入

转载 作者:行者123 更新时间:2023-12-01 21:16:58 39 4
gpt4 key购买 nike

假设我有以下结构:

type Room struct {
BaseModel
}

func main() {
r := Room{}
}

在代码的其他地方说我获得了一个对象 r。它可以是 Room 或其他东西。我想在运行时检查 r 的类(在本例中为 Room)是否具有 BaseModel 的结构嵌​​入。这可能吗?

最佳答案

是的,您可以使用反射在运行时进行检查。这是一个非常简单的示例,它使用 reflect.TypeOf 来打印嵌入结构 Fooreflect 的结构 Bar 的每个字段的类型。 ValueOf 用于打印字段是否为匿名 (true) - 这是您要求的一个很好的指标:

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))
}
}

这是 Playground 上的代码:https://play.golang.org/p/zNWxZUzq_RS

你不会问你到底想用这些信息做什么,所以你会指向 reflect documentation用于更高级的用途。

关于go - 在运行时检查结构是否具有结构嵌入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61585699/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com