Go 语言提供了运行时反射的内置支持实现,并允许程序在反射包的帮助下操作任意类型的对象。 Golang 中的reflect.Tag.Lookup()函数用于在标签字符串查找与key 关联的值,如果标签中没有这样的key 则返回空字符串,并确定标签是否显式设置为空字符串。要访问此函数,需要在程序中导入反射包。
Syntax:
Parameters: This function takes two parameters of string type (value) and bool type(ok).
Return Value: This function returns the value associated with key in the tag string and the value was explicitly set.
下面的例子说明了上述方法在 Golang 中的使用:
示例 1:
func (tag StructTag) Lookup(key string) (value string, ok bool)
输出:
// Golang program to illustrate
// reflect.Tag.Lookup() Function
package main
import (
"fmt"
"reflect"
)
// Main function
func main() {
type S struct {
F0 string `val:"123456"`
F1 string `val:""`
F2 string
}
s := S{}
st := reflect.TypeOf(s)
for i := 0; i < st.NumField(); i++ {
field := st.Field(i)
// use of Lookup method
if value, ok := field.Tag.Lookup("val"); ok {
if value == "" {
fmt.Println("(Empty)")
} else {
fmt.Println(value)
}
} else {
fmt.Println("(Non specific)")
}
}
}
示例 2:
123456
(Empty)
(Non specific)
输出:
// Golang program to illustrate
// reflect.Tag.Lookup() Function
package main
import (
"fmt"
"reflect"
"strconv"
)
type Temp struct {
ID string `auto_increment:"true" increment:"1"`
Name string `varchar: "255"`
Surname string `"varchar: "255"`
}
// Main function
func main() {
v:= Temp{}
// c variable represents table columns
c := reflect.TypeOf(v).Field(0).Tag
// g variable represents get
g := c.Get("increment")
fmt.Printf("Get method: %s\n", g)
val, ok := c.Lookup("auto_increments")
fmt.Printf("Lookup method: %s- %s", val, strconv.FormatBool(ok))
}