package impl import ( "database/sql/driver" "encoding/json" ) type Int64Array []int64 func (v *Int64Array) Scan(value interface{}) error { //判断类型 switch data := value.(type) { case []byte: return json.Unmarshal(data, v) case string: return json.Unmarshal([]byte(data), v) case nil: return nil } return json.Unmarshal(value.([]byte), v) } func (v Int64Array) Value() (driver.Value, error) { return json.Marshal(v) } func (v Int64Array) RemoveDuplicates() Int64Array { newArr := make([]int64, 0) for i := 0; i < len(v); i++ { repeat := false for j := i + 1; j < len(v); j++ { if v[i] == v[j] { repeat = true break } } if !repeat { newArr = append(newArr, v[i]) } } return newArr } func (v Int64Array) RemoveEmpty() Int64Array { return v.RemoveValue(0) } func (v Int64Array) RemoveValue(value int64) Int64Array { newArr := make([]int64, 0) for i := 0; i < len(v); i++ { if v[i] != value { newArr = append(newArr, v[i]) } } return newArr } func (v Int64Array) Contains(id int64) bool { for _, i := range v { if i == id { return true } } return false } func (v Int64Array) Eq(arr []int64) bool { if len(v) != len(arr) { return false } for _, i := range arr { //只要有一个不包含就是不一样的 if v.Contains(i) == false { return false } } return true } func (v Int64Array) ToIntSlice() []int { out := make([]int, 0) for _, i := range v { out = append(out, int(i)) } return out }