package impl import ( "database/sql/driver" "encoding/json" "strings" ) type StringArray []string func (v *StringArray) 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 StringArray) Value() (driver.Value, error) { return json.Marshal(v) } func (v StringArray) RemoveDuplicates() StringArray { newArr := make([]string, 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 StringArray) RemoveEmpty() StringArray { return v.RemoveValue("") } func (v StringArray) RemoveValue(value string) StringArray { newArr := make([]string, 0) for i := 0; i < len(v); i++ { if !strings.EqualFold(v[i], value) { newArr = append(newArr, v[i]) } } return newArr } func (v StringArray) Contains(str string) bool { for _, i := range v { if i == str { return true } } return false } func (v StringArray) Eq(strArr []string) bool { if len(v) != len(strArr) { return false } for _, i := range strArr { //只要有一个不包含就是不一样的 if v.Contains(i) == false { return false } } return true } func (v StringArray) ToStringSlice() []string { out := make([]string, 0) for _, i := range v { out = append(out, i) } return out }