123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- // 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 gstructs
- import (
- "reflect"
- "github.com/gogf/gf/v2/internal/empty"
- "github.com/gogf/gf/v2/internal/utils"
- "github.com/gogf/gf/v2/util/gtag"
- )
- // Tag returns the value associated with key in the tag string. If there is no
- // such key in the tag, Tag returns the empty string.
- func (f *Field) Tag(key string) string {
- s := f.Field.Tag.Get(key)
- if s != "" {
- s = gtag.Parse(s)
- }
- return s
- }
- // TagLookup returns the value associated with key in the tag string.
- // If the key is present in the tag the value (which may be empty)
- // is returned. Otherwise, the returned value will be the empty string.
- // The ok return value reports whether the value was explicitly set in
- // the tag string. If the tag does not have the conventional format,
- // the value returned by Lookup is unspecified.
- func (f *Field) TagLookup(key string) (value string, ok bool) {
- value, ok = f.Field.Tag.Lookup(key)
- if ok && value != "" {
- value = gtag.Parse(value)
- }
- return
- }
- // IsEmbedded returns true if the given field is an anonymous field (embedded)
- func (f *Field) IsEmbedded() bool {
- return f.Field.Anonymous
- }
- // TagStr returns the tag string of the field.
- func (f *Field) TagStr() string {
- return string(f.Field.Tag)
- }
- // TagMap returns all the tag of the field along with its value string as map.
- func (f *Field) TagMap() map[string]string {
- var (
- data = ParseTag(f.TagStr())
- )
- for k, v := range data {
- data[k] = utils.StripSlashes(gtag.Parse(v))
- }
- return data
- }
- // IsExported returns true if the given field is exported.
- func (f *Field) IsExported() bool {
- return f.Field.PkgPath == ""
- }
- // Name returns the name of the given field.
- func (f *Field) Name() string {
- return f.Field.Name
- }
- // Type returns the type of the given field.
- // Note that this Type is not reflect.Type. If you need reflect.Type, please use Field.Type().Type.
- func (f *Field) Type() Type {
- return Type{
- Type: f.Field.Type,
- }
- }
- // Kind returns the reflect.Kind for Value of Field `f`.
- func (f *Field) Kind() reflect.Kind {
- return f.Value.Kind()
- }
- // OriginalKind retrieves and returns the original reflect.Kind for Value of Field `f`.
- func (f *Field) OriginalKind() reflect.Kind {
- var (
- reflectType = f.Value.Type()
- reflectKind = reflectType.Kind()
- )
- for reflectKind == reflect.Ptr {
- reflectType = reflectType.Elem()
- reflectKind = reflectType.Kind()
- }
- return reflectKind
- }
- // IsEmpty checks and returns whether the value of this Field is empty.
- func (f *Field) IsEmpty() bool {
- return empty.IsEmpty(f.Value)
- }
- // IsNil checks and returns whether the value of this Field is nil.
- func (f *Field) IsNil(traceSource ...bool) bool {
- return empty.IsNil(f.Value, traceSource...)
- }
|