如何在Golang中检查结构体是否包含未导出的字段?

huangapple go评论75阅读模式
英文:

How to check if a struct contains unexported fields in Golang?

问题

我有一个结构体:

type Person struct {
    Name string
    DOB string
    age int
}

如何构建detectUnexportedInStruct()函数,以便在结构体中检测是否存在未导出的字段?我希望当Person结构体包含未导出的字段age时,打印出true

英文:

Example:

I have a struct,

 type Person struct {
        Name string
        DOB string
        age int
    }

func detectUnexportedInStruct(i interface{}) bool {
         // if `i` contains unexported fields return true
         // else return false
    }
    
func main() {
    fmt.Println(detectUnexportedInStruct(Person{Name: "", DOB: ""}))
}

I would want true to be printed because Person contains an unexported field age.

How can I build my detectUnexportedInStruct() ?

答案1

得分: 4

使用reflect包:

func detectUnexportedInStruct(i interface{}) bool {
    rt := reflect.TypeOf(i)
    for i := 0; i < rt.NumField(); i++ {
        if !rt.Field(i).IsExported() {
            return true
        }
    }
    return false
}

https://play.golang.org/p/f_JVLWYavjm

英文:

Use the reflect package:

func detectUnexportedInStruct(i interface{}) bool {
	rt := reflect.TypeOf(i)
	for i := 0; i &lt; rt.NumField(); i++ {
		if !rt.Field(i).IsExported() {
			return true
		}
	}
	return false
}

https://play.golang.org/p/f_JVLWYavjm

huangapple
  • 本文由 发表于 2021年10月27日 16:08:35
  • 转载请务必保留本文链接:https://go.coder-hub.com/69734981.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定