当前位置: 首页 > 面试题库 >

使用反射将指针设置为字段

卫兴邦
2023-03-14
问题内容

我有以下结构,并且需要某些字段为空,所以我使用指针,主要是处理sql空值

type Chicken struct{
    Id                int         //Not nullable
    Name              *string     //can be null
    AvgMonthlyEggs    *float32    //can be null
    BirthDate         *time.Time  //can be null
}

所以当我执行以下操作时,我可以看到json结果中的值类型可以为null

stringValue:="xx"
chicken := &Chicken{1,&stringValue,nil,nil}
chickenJson,_ := json.Marshal(&chicken)
fmt.Println(string(chickenJson))

但是当我尝试使用反射完成所有操作时

    var chickenPtr *Chicken
    itemTyp := reflect.TypeOf(chickenPtr).Elem()
    item  := reflect.New(itemTyp)
    item.Elem().FieldByName("Id").SetInt(1)
    //the problem is here not sure how to set the pointer to the field
    item.Elem().FieldByName("Name").Set(&stringValue) //Error caused by this line
    itemJson,_ := json.Marshal(item.Interface())
    fmt.Println(string(itemJson))

我从反射部分得到的是以下错误

cannot use &stringValue (type *string) as type reflect.Value in argument to item.Elem().FieldByName("Name").Set

我究竟做错了什么?

这是一个GoPlay
http://play.golang.org/p/0xt45uHoUn


问题答案:

Reflection.Value.Set仅接受reflect.Value作为参数。reflect.ValueOf在您的stringValue上使用:

item.Elem().FieldByName("Name").Set(reflect.ValueOf(&stringValue))

游乐场:http :
//play.golang.org/p/DNxsbCsKZA。



 类似资料:
  • 问题内容: 我正在与一个非开源项目合作,我需要修改一个或多个其类。 在一个类中是以下集合: 我需要做的就是在这里使用反射和并发hashmap。我试过下面的代码,但是不起作用。 问题答案: 希望这是您要尝试做的事情: 它打印:

  • 问题内容: 我有一个函数,可以遍历作为参数传递的接口的所有字段。为了实现这一点,我正在使用反射。问题是我不知道如何获取非指针字段的地址。这是一个例子: 上面的代码代表了我的测试结构。现在,这是遍历指定结构并列出有关其详细信息的实际函数: 这是结构实例化/初始化之后的实际测试: 最后是InspectStruct调用的输出: 如您所见,我正在使用递归,因此,如果其中一个字段是结构类型,则可以为其调用I

  • 问题内容: 如何将类型中的字符串指针的引用值设置为空字符串?考虑以下示例: 我尝试了和运算符的所有组合都无济于事: 显然其中一些很愚蠢,但我没有发现尝试的危害。我也尝试使用和: 这会导致编译错误 恐慌:反映:使用不可寻址的值reflect.Value.SetString 我假设这是因为Go中的字符串是不可变的? 问题答案: 字符串文字不可寻址。 取包含空字符串的变量的地址: 或使用新的:

  • 这是我得到的错误(在setMOTD的最后第二行):

  • 问题内容: 我有2类:和 通过反思,我想在课堂上设置: 但我有一个例外: 线程“主”中的异常java.lang.NoSuchFieldException:a_field 但是,如果我尝试: 有用。 使用setter方法我有同样的问题: 问题答案: 要访问私有字段,您需要设置为true。您可以离开超类领域。此代码有效:

  • 问题内容: 我正在尝试使用Jackson将一些JSON对象映射到Java对象。JSON对象中的某些字段是必填字段(可以用标记),而某些字段是可选字段。 用Jackson映射之后,在JSON对象中未设置的所有字段在Java中都将具有空值。是否有类似的注释可以告诉Jackson为Java类成员设置默认值(如果为null)? 编辑:为了使问题更清楚,这里是一些代码示例。 Java对象: JSON对象可以