diff --git a/internal/model/material.go b/internal/model/material.go index 0dc2cbd..dcb8510 100644 --- a/internal/model/material.go +++ b/internal/model/material.go @@ -71,11 +71,16 @@ func (a *StringArray) Scan(value any) error { *a = nil return nil } - bytes, ok := value.([]byte) - if !ok { + var data []byte + switch v := value.(type) { + case []byte: + data = v + case string: + data = []byte(v) + default: return nil } - return json.Unmarshal(bytes, a) + return json.Unmarshal(data, a) } // MaterialFile 文件资料 diff --git a/internal/model/message.go b/internal/model/message.go index 066d898..b135816 100644 --- a/internal/model/message.go +++ b/internal/model/message.go @@ -101,11 +101,16 @@ func (e *ExtraData) Scan(value any) error { if value == nil { return nil } - bytes, ok := value.([]byte) - if !ok { - return errors.New("type assertion to []byte failed") + var data []byte + switch v := value.(type) { + case []byte: + data = v + case string: + data = []byte(v) + default: + return errors.New("type assertion to []byte or string failed") } - return json.Unmarshal(bytes, e) + return json.Unmarshal(data, e) } // MessageSegmentData 单个消息段的数据 @@ -131,11 +136,16 @@ func (s *MessageSegments) Scan(value any) error { *s = nil return nil } - bytes, ok := value.([]byte) - if !ok { - return errors.New("type assertion to []byte failed") + var data []byte + switch v := value.(type) { + case []byte: + data = v + case string: + data = []byte(v) + default: + return errors.New("type assertion to []byte or string failed") } - return json.Unmarshal(bytes, s) + return json.Unmarshal(data, s) } // Message 消息实体 diff --git a/internal/model/system_notification.go b/internal/model/system_notification.go index a70c94d..57b8aa8 100644 --- a/internal/model/system_notification.go +++ b/internal/model/system_notification.go @@ -79,11 +79,16 @@ func (e *SystemNotificationExtra) Scan(value any) error { if value == nil { return nil } - bytes, ok := value.([]byte) - if !ok { - return errors.New("type assertion to []byte failed") + var data []byte + switch v := value.(type) { + case []byte: + data = v + case string: + data = []byte(v) + default: + return errors.New("type assertion to []byte or string failed") } - return json.Unmarshal(bytes, e) + return json.Unmarshal(data, e) } // SystemNotification 系统通知(独立表,与消息完全分离)