/
githubmirror
/
GoFrame
Обзор
Документация
Войти
/
githubmirror
/
GoFrame
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
util/gmeta/gmeta.go
44 строки
1 KB
John Guo
improve package gmeta
18 май 2022, 12:57
18 май 2022, 12:57
6176028
Код
Авторство
О чём код?
// 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) }