代码拉取完成,页面将自动刷新
package struct_filter
import (
"fmt"
"reflect"
"sync"
)
var _structs = newStructs()
func GetStruct(typ reflect.Type) *Struct {
return _structs.Get(typ)
}
type structs struct {
mu sync.RWMutex
structs map[reflect.Type]*Struct
}
func newStructs() *structs {
return &structs{
structs: make(map[reflect.Type]*Struct),
}
}
func (s *structs) Get(typ reflect.Type) *Struct {
if typ.Kind() != reflect.Struct {
panic(fmt.Errorf("got %s, wanted %s", typ.Kind(), reflect.Struct))
}
s.mu.RLock()
strct, ok := s.structs[typ]
s.mu.RUnlock()
if ok {
return strct
}
s.mu.Lock()
strct, ok = s.structs[typ]
if ok {
s.mu.Unlock()
return strct
}
strct = NewStruct(typ)
s.structs[typ] = strct
s.mu.Unlock()
return strct
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。