gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:49 24 4
gpt4 key购买 nike

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

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 中设置的值即使我传入了指向字段的指针。

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

最佳答案

Is there anything wrong with the above code?

是的。您正在丢弃指针,只是用新值覆盖它们。要设置指针指向的值,您必须取消引用它。在您的情况下可能看起来像这样:

for i, s := range source {
str, ok := dest[i].(*string)
if ok {
*str = s.(string)
}
}

关于pointers - 返回给函数的调用者时无法保留 golang 字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56260546/

24 4 0
文章推荐: go - go语法struct {} {}的含义是什么
文章推荐: c# - 在 C# 中,为什么 List 对象不能存储在 List 变量中