github.com/zly-app/zapp@v1.3.3/pkg/serializer/serializer.go (about) 1 package serializer 2 3 import ( 4 "io" 5 6 "go.uber.org/zap" 7 8 "github.com/zly-app/zapp/logger" 9 ) 10 11 // 序列化器 12 type ISerializer interface { 13 // 序列化 14 Marshal(a interface{}, w io.Writer) error 15 // 序列化 16 MarshalBytes(a interface{}) ([]byte, error) 17 // 反序列化 18 Unmarshal(r io.Reader, a interface{}) error 19 // 反序列化 20 UnmarshalBytes(data []byte, a interface{}) error 21 } 22 23 var serializers = map[string]ISerializer{ 24 BaseSerializerName: NewBaseSerializer(jsonIterStandard.Marshal, jsonIterStandard.Unmarshal), 25 BytesSerializerName: bytesSerializer{}, 26 JsonSerializerName: jsonSerializer{}, 27 JsonIterSerializerName: jsonIterSerializer{}, 28 JsonIterStandardSerializerName: jsonIterStandardSerializer{}, 29 MsgPackSerializerName: msgPackSerializer{}, 30 YamlSerializerName: yamlSerializer{}, 31 } 32 33 // 注册序列化器, 重复注册会panic 34 func RegistrySerializer(name string, c ISerializer, replace ...bool) { 35 if len(replace) == 0 || !replace[0] { 36 if _, ok := serializers[name]; ok { 37 logger.Log.Panic("Serializer重复注册", zap.String("name", name)) 38 } 39 } 40 serializers[name] = c 41 } 42 43 // 获取序列化器 44 func GetSerializer(name string) ISerializer { 45 c, ok := serializers[name] 46 if !ok { 47 logger.Log.Panic("试图获取未注册的序列化器", zap.String("name", name)) 48 } 49 return c 50 } 51 52 // 尝试获取序列化器 53 func TryGetSerializer(name string) (ISerializer, bool) { 54 c, ok := serializers[name] 55 return c, ok 56 }