Golang reflect.Tag.Lookup()函数的使用及示例
Go语言提供了内置支持的运行时反射实现,使得程序能够通过reflect包操作具有任意类型的对象。在Golang中, reflect.Tag.Lookup() 函数用于查找与标签字符串中的键相关联的值。如果标记中没有这样的键,则返回一个空字符串,以确定标记是否显式设置为空字符串。要访问此函数,需要在程序中导入reflect包。
语法:
func (tag StructTag) Lookup(key string) (value string, ok bool)
参数: 此函数带有两个字符串类型(value)和布尔类型(ok)的参数。
返回值: 此函数返回与标记字符串中的键相关联的值和该值已明确设置。
下面的例子说明了上述方法在Golang中的使用:
示例 1:
// Golang程序,演示
// reflect.Tag.Lookup()函数
package main
import (
"fmt"
"reflect"
)
// 主函数
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)
// 处理Lookup函数
if value, ok := field.Tag.Lookup("val"); ok {
if value == "" {
fmt.Println("(空)")
} else {
fmt.Println(value)
}
} else {
fmt.Println("(未指明的)")
}
}
}
输出:
123456
(空)
(未指明的)
示例2:
// Golang程序,演示
// reflect.Tag.Lookup()函数
package main
import (
"fmt"
"reflect"
"strconv"
)
type Temp struct {
ID string `auto_increment:"true" increment:"1"`
Name string `varchar: "255"`
Surname string `"varchar: "255"`
}
// 主函数
func main() {
v:= Temp{}
// c 变量表示表列
c := reflect.TypeOf(v).Field(0).Tag
// g变量表示获取
g := c.Get("increment")
fmt.Printf("Get 方法:%s\n", g)
val, ok := c.Lookup("auto_increments")
fmt.Printf("Lookup 方法:%s- %s", val, strconv.FormatBool(ok))
}
输出:
Get 方法: 1
Lookup 方法: - false