Golang : How to get struct tag and use field name to retrieve data?
Problem :
A structure data field can have additional information or meta-data. This information is known as struct tag in Golang. You want to find out a struct data field type's struct tag. How to that with the reflect
package?
NOTE : Don't confuse field name and struct tag yeah!
Solution :
Use the reflect package StructField type to retrieve the data.
Here you go !
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string `json:name`
}
func getStructTag(f reflect.StructField) string {
return string(f.Tag)
}
func main() {
user := &Person{"Adam"}
field, ok := reflect.TypeOf(user).Elem().FieldByName("Name") // not json:name
if !ok {
panic("Field not found")
}
// get the struct field tag
// see http://golang.org/pkg/reflect/#StructField
fmt.Println(getStructTag(field)) // json:name
//----- get data from the initialized Person struct
//----- based on the field name
r := reflect.ValueOf(user)
f := reflect.Indirect(r).FieldByName("Name")
fmt.Println(f)
}
Output :
json:name
Adam
Happy coding !
References :
See also : Golang : How to get struct field and value by name
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+8.5k Golang : Executing and evaluating nested loop in html template
+5.9k Golang : Dealing with backquote
+16.1k Golang : Test floating point numbers not-a-number and infinite example
+23.2k Golang : minus time with Time.Add() or Time.AddDate() functions to calculate past date
+13.2k Golang : Read from buffered reader until specific number of bytes
+27.8k Golang : Connect to database (MySQL/MariaDB) server
+19.2k Golang : Get current URL example
+13.7k Golang : concatenate(combine) strings
+29.5k Golang : How to declare kilobyte, megabyte, gigabyte, terabyte and so on?
+20.8k Golang : Get password from console input without echo or masked
+8.3k Linux/Unix : fatal: the Postfix mail system is already running
+12.5k Swift : Convert (cast) Int or int32 value to CGFloat