gpt4 book ai didi

go - 如何使用反射在go中创建接口(interface)值类型的对象

转载 作者:行者123 更新时间:2023-12-04 07:40:29 24 4
gpt4 key购买 nike

更新
我想制作帮助函数来测试读取 env vars 函数。它使用 envconfig .

func Test_T2(t *testing.T) {

os.Setenv("APP_PARAM_STR", "string value")
os.Setenv("APP_PARAM_INT", "12")

os.Setenv("APP_PARAM_DURATION", "15s")
os.Setenv("APP_PARAM_INT", "44")

c := ConfigTwo{}

d := ConfigTwo{
ParamDuration: 15*time.Second,
ParamInt: 44,
}

helper(t, &c, &d)
}

func helper(t *testing.T, confObject, expValue interface{}) {
t.Helper()

err := getParams(&confObject)
if !assert.NoError(t, err) {
return
}

assert.Equal(t, expValue, confObject)
}

func getParams(cfg interface{}) error {
return envconfig.Process("APP", cfg)

}

** UPDATE 2 **
It works. Thanks everyone.

如果我只有 getPrams 功能,它就可以工作。但是如果我添加助手(我需要测试不同的结构)我会得到一个错误: specification must be a struct pointer 环境配置 执行两次检查 here :

最佳答案

使用此代码。参数是一个指向期望值的指针。

func helper(t *testing.T, pexpected interface{}) {
t.Helper()
pactual := reflect.New(reflect.TypeOf(pexpected).Elem()).Interface()

err := getParams(pactual)
if !assert.NoError(t, err) {
return
}

assert.Equal(t, pexpected, pactual)
}
表达式 reflect.New(reflect.TypeOf(pexeceted).Elem()).Interface()返回指向与 pexpected 指向的类型相同的新空值的指针。
像这样称呼它:
helper(t, &ConfigTwo{A: "expected A Field", B: "expected B field"}

关于go - 如何使用反射在go中创建接口(interface)值类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67507877/

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