登录
首页 >  Golang >  Go问答

如何使用反射设置指针结构体字段为其类型的零值指针?

来源:stackoverflow

时间:2024-03-04 13:00:25 493浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《如何使用反射设置指针结构体字段为其类型的零值指针?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

这个标题很拗口,让我解释一下。假设我有一个所有指针的结构(不知道什么类型)

type a struct {
  s *string
  i *int
}

我想编写一个函数,它接受指向该结构的指针,并给定 fieldname 将该字段设置为指向该指针的零/空值的指针。例如:

func setZeroForField(i any, fieldName string) {
  // do stuff
}

a := A{}
setZeroForField(&a, "S")
setZeroForField(&a, "I")

// *a.S == ""
// *a.I == 0

有什么办法可以使用反射来做到这一点吗?我知道如何获取 a 字段的类型,但我不能使用 reflect.indirect 因为它只返回一个零值,在本例中是一个 nil 指针,而不是空字符串或 0。


正确答案


func setZeroForField(i any, fieldName string) {
    rv := reflect.ValueOf(i).Elem()
    fv := rv.FieldByName(fieldName)
    fv.Set(reflect.New(fv.Type().Elem()))
}

https://go.dev/play/p/7clmztF5uaa

到这里,我们也就讲完了《如何使用反射设置指针结构体字段为其类型的零值指针?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>