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

更新


我想制作帮助器函数来测试阅读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


envconfig 在这里执行两个检查:


阿波罗的战车
浏览 112回答 1
1回答

守候你守候我

使用此代码。该参数是指向预期值的指针。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"}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go