tagfast

package module
v0.0.0-...-2b69b24 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 25, 2015 License: MIT Imports: 3 Imported by: 8

README

tagfast

golang:优化读取struct内的tag值(只解析一次,以后都从缓存中读取。官方的版本每次使用typ.Field(i).Tag.Get("tag1")都要解析一次,效率不高)

用法

package main
import (
  "fmt"
  "reflect"
  "github.com/coscms/tagfast"
)

type Coscms struct {
  Url string `xorm:"not null default '' VARCHAR(255)" valid:"Requied" form_widget:"text"`
  Email string `xorm:"not null default '' VARCHAR(255)" valid:"Requied" form_widget:"text"`
}

func main(){
  m := Coscms{}
  t := reflect.TypeOf(m)
  for i := 0; i < t.NumField(); i++ {
    f := t.Field(i)
    widget:=tagfast.Tag(t,f,"form_widget")
    fmt.Println("widget:",widget)
    
    valid:=tagfast.Tag(t,f,"valid")
    fmt.Println("valid:",valid)
    
    xorm:=tagfast.Tag(t,f,"xorm")
    fmt.Println("xorm:",xorm)
    
  }
}

注意事项

不要在同一个包内定义相同名称的结构体。 由于是按照“包名称+结构体名称”来缓存Tag,第二个结构体如果跟第一个结构体同名, 那么它们只会被当做同一个结构体来获取Tag,从而导致第二个具有相同名称的结构体获取Tag不正确。

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CachedStructTags map[string]map[string]*TagFast = make(map[string]map[string]*TagFast)

[struct_name][field_name]

Functions

func CacheTag

func CacheTag(struct_name string, field_name string, value *TagFast)

func ClearTag

func ClearTag()

func ParseStructTag

func ParseStructTag(tag string) map[string]string

func Tag

func Tag(t reflect.Type, f reflect.StructField, key string) (tag string)

func Tag1

func Tag1(t reflect.Type, field_no int, key string) (tag string)

usage: Tag1(t, i, "form")

func Tag2

func Tag2(t reflect.Type, field_name string, key string) (tag string)

usage: Tag2(t, "Id", "form")

Types

type TagFast

type TagFast struct {
	Tag    reflect.StructTag
	Cached map[string]string
	Parsed map[string]interface{}
}

func GetTag

func GetTag(struct_name string, field_name string) (r *TagFast, ok bool)

func Tago

func Tago(t reflect.Type, f reflect.StructField, key string) (tag string, tf *TagFast)

func (*TagFast) Get

func (a *TagFast) Get(key string) string

func (*TagFast) GetParsed

func (a *TagFast) GetParsed(key string, fns ...func() interface{}) interface{}

func (*TagFast) SetParsed

func (a *TagFast) SetParsed(key string, value interface{}) bool

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL