1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
- //
- // This Source Code Form is subject to the terms of the MIT License.
- // If a copy of the MIT was not distributed with this file,
- // You can obtain one at https://github.com/gogf/gf.
- // Package gmeta provides embedded meta data feature for struct.
- package gmeta
- import (
- "github.com/gogf/gf/v2/container/gvar"
- "github.com/gogf/gf/v2/os/gstructs"
- )
- // Meta is used as an embedded attribute for struct to enabled metadata feature.
- type Meta struct{}
- const (
- metaAttributeName = "Meta" // metaAttributeName is the attribute name of metadata in struct.
- metaTypeName = "gmeta.Meta" // metaTypeName is for type string comparison.
- )
- // Data retrieves and returns all metadata from `object`.
- func Data(object interface{}) map[string]string {
- reflectType, err := gstructs.StructType(object)
- if err != nil {
- return nil
- }
- if field, ok := reflectType.FieldByName(metaAttributeName); ok {
- if field.Type.String() == metaTypeName {
- return gstructs.ParseTag(string(field.Tag))
- }
- }
- return map[string]string{}
- }
- // Get retrieves and returns specified metadata by `key` from `object`.
- func Get(object interface{}, key string) *gvar.Var {
- v, ok := Data(object)[key]
- if !ok {
- return nil
- }
- return gvar.New(v)
- }
|