gpt4 book ai didi

go - 保存类型以供以后反射

转载 作者:行者123 更新时间:2023-12-01 22:07:49 24 4
gpt4 key购买 nike

我正在尝试做这样的事情:

结构保存设置:

type Setting struct{
Name string
DataType types.Type
}

设置定义:
var SETTING_DebugLogging Setting = Setting{
Name: "DebugLogging",
DataType: bool, <-- This is wrong
}

然后,使用反射和DataType上的值从Map中获取值:
// Get a value setting, or his default
func (s Setting) Get() interface{}{
val, ok := settings[s].(s.DataType) <-- This is wrong
if !ok{
return s.DefaultValue.(s.DataType) <-- This is wrong
}

return val
}

我不会这样做,以确保“获取”始终返回该设置的预期值。如果它是无效的,则返回默认值,因此我不必再次检查代码。

仅做var:= setting.Get()。(setting.DataType)就足够了,不需要检查。

我也尝试过使用Reflection.kind保存设置的类型。那可以存储它,但是我不能用它来解析后者:

使用reflect.Kind可以。
// Game to launch
var SETTING_GameToLaunch Setting = Setting{
Name: "GameToLaunch",
DataType: reflect.Bool,
DefaultValue: 2,
}

但这在后面不起作用:
func (s Setting) Get() interface{}{
val, ok := settings[s].(s.DataType)

所以。关于我该怎么做的任何想法?
存储一个类型,并将其与反射一起使用?

最佳答案

您可以使用/存储 reflect.Type 。在Get()中,您可以检查该值是否为该类型,例如reflect.TypeOf(settings[s]) == s.DataType

但是,仅使用结构并将枚举设置作为字段会更简单。这将是类型安全的,并且在使用/获取设置值时不必使用类型断言。

关于go - 保存类型以供以后反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60027568/

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