在Go中按字段符号查找标记

在Go中按字段符号查找标记,go,reflection,Go,Reflection,给定一个包含字段的结构,我希望以符号方式查找特定字段的标记值(不提供字段名作为字符串) 键入MyStruct struct{ Foo string`tag:“val”` } 实体:=MyStruct{} tagVal:=getTag(&entity.Foo)//函数将为Foo字段返回“val” 我想实现一个getTag函数,该函数将返回给定字段的标记值。指向字段值的指针不包含任何有关所有者结构的信息,这是一种不同的间接方式,因此只有指针字段值不足以解决问题 一种解决方案是使用指向所有者结构的指

给定一个包含字段的结构,我希望以符号方式查找特定字段的标记值(不提供字段名作为字符串)

键入MyStruct struct{
Foo string`tag:“val”`
}
实体:=MyStruct{}
tagVal:=getTag(&entity.Foo)//函数将为Foo字段返回“val”

我想实现一个
getTag
函数,该函数将返回给定字段的标记值。

指向字段值的指针不包含任何有关所有者结构的信息,这是一种不同的间接方式,因此只有指针字段值不足以解决问题

一种解决方案是使用指向所有者结构的指针和指向该结构中字段的指针,通过反射迭代该结构值的字段,直到迭代字段的地址与给定的字段值指针匹配

主程序包
进口(
“fmt”
“反映”
)
func main(){
类型MyStruct struct{
Foo string`tag:“val”`
}
实体:=MyStruct{}
tagVal:=getTag(&entity,&entity.Foo)
fmt.Println(tagVal)//val
}
func getTag(structPtr,fieldPtr接口{})字符串{
sf,ok:=structFieldByValPtr(structPtr,fieldPtr)
如果!好的{
返回“”
}
返回sf.Tag.Get(“Tag”)
}
func structFieldByValPtr(structPtr,fieldPtr接口{})(reflect.StructField,bool){
v:=反射.间接(反射.值(structPtr))
t:=v.Type()
对于i:=0;i
指向字段值的指针不包含有关所有者结构的任何信息,这是一种不同的间接方式,因此仅具有指针字段值不足以解决问题

一种解决方案是使用指向所有者结构的指针和指向该结构中字段的指针,通过反射迭代该结构值的字段,直到迭代字段的地址与给定的字段值指针匹配

主程序包
进口(
“fmt”
“反映”
)
func main(){
类型MyStruct struct{
Foo string`tag:“val”`
}
实体:=MyStruct{}
tagVal:=getTag(&entity,&entity.Foo)
fmt.Println(tagVal)//val
}
func getTag(structPtr,fieldPtr接口{})字符串{
sf,ok:=structFieldByValPtr(structPtr,fieldPtr)
如果!好的{
返回“”
}
返回sf.Tag.Get(“Tag”)
}
func structFieldByValPtr(structPtr,fieldPtr接口{})(reflect.StructField,bool){
v:=反射.间接(反射.值(structPtr))
t:=v.Type()
对于i:=0;i