📜  Golang 中的reflect.Tag.Lookup()函数示例

📅  最后修改于: 2021-10-25 02:23:18             🧑  作者: Mango

Go 语言提供了运行时反射的内置支持实现,并允许程序在反射包的帮助下操作任意类型的对象。 Golang 中的reflect.Tag.Lookup()函数用于在标签字符串查找与key 关联的值,如果标签中没有这样的key 则返回空字符串,并确定标签是否显式设置为空字符串。要访问此函数,需要在程序中导入反射包。

下面的例子说明了上述方法在 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))    
}