为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
阿波罗的战车 2022-08-30 15:22:14
更新我想制作帮助器函数来测试阅读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 pointerenvconfig 在这里执行两个检查:
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

使用此代码。该参数是指向预期值的指针。


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)

}

该表达式返回一个指向新空值的指针,该值的类型与 pexpected 所指向的值相同。reflect.New(reflect.TypeOf(pexeceted).Elem()).Interface()


这样称呼它:


helper(t, &ConfigTwo{A: "expected A Field", B: "expected B field"}


查看完整回答
反对 回复 2022-08-30
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信