返回给函数的调用者时无法保留 golang 字段的值

我有一个函数,它接受值和字段的切片作为一组可选参数,并且该函数将每个值映射到一个字段并返回错误(如果有的话)给调用者,如下所示


func Unmarshall(source []interface{}, dest ...interface{}) error {

    if len(source) != len(dest) {

        return errors.New("source and destination doesn't match")

    }


    for i, s := range source {

        dest[i] = s

    }

    return nil

}

在我为来电者提供的代码下方


for _, r := range rows.Values {

        item := entity.Item{}

        e :=Unmarshall(r,

            &item.Name,

            &item.Description,          

            &item.AddedUTCDatetime,

            &item.ModifiedUTCDatetime)


        if e == nil {           

            items = append(items, item)

        }

    }

但是上面的问题是即使我传入了指向字段的指针,也item.Name,item.Description,                &item.AddedUTCDatetime, &item.ModifiedUTCDatetime不会保留中设置的值。Unmarshall func


上面的代码有什么问题吗?


芜湖不芜
浏览 126回答 2
2回答

温温酱

上面的代码有什么问题吗?是的。您正在丢弃指针,只是用新值覆盖它们。要设置指针指向的值,您必须取消引用它。在您的情况下可能看起来像这样:for i, s := range source {    str, ok := dest[i].(*string)    if ok {      *str = s.(string)    }}

慕尼黑8549860

这个照顾所有类型for i, s := range source {        so := reflect.ValueOf(s)        if !reflect.DeepEqual(so, reflect.Zero(reflect.TypeOf(so)).Interface()) {            reflect.ValueOf(dest[i]).Elem().Set(so)        }    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go