package dto import ( "fmt" "strconv" ) // StringID 自定义ID类型, JSON序列化为字符串(兼容JS大整数) type StringID uint64 func (id StringID) MarshalJSON() ([]byte, error) { return []byte(`"` + strconv.FormatUint(uint64(id), 10) + `"`), nil } func (id *StringID) UnmarshalJSON(data []byte) error { s, err := strconv.Unquote(string(data)) if err != nil { return fmt.Errorf("StringID unmarshal: %w", err) } v, err := strconv.ParseUint(s, 10, 64) if err != nil { return fmt.Errorf("StringID parse: %w", err) } *id = StringID(v) return nil }