如何将Go语言中删除切片特定元素和剔除零值操作合并为一个长尾?

2026-04-02 02:151阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计290个文字,预计阅读时间需要2分钟。

如何将Go语言中删除切片特定元素和剔除零值操作合并为一个长尾?

gofunc remove(slice []interface{}, elem interface{}) []interface{} { if len(slice)==0 { return slice } for i, v :=range slice { if v==elem { slice=append(slice[:i], slice[i+1:]...) return remove(slice, elem) } } return slice}


func remove(slice []interface{}, elem interface{}) []interface{}{
if len(slice) == 0 {
return slice
}
for i, v := range slice {
if v == elem {
slice = append(slice[:i], slice[i+1:]...)
return remove(slice,elem)
break
}
}
return slice
}

func removeZero(slice []interface{}) []interface{}{
if len(slice) == 0 {
return slice
}
for i, v := range slice {
if ifZero(v) {
slice = append(slice[:i], slice[i+1:]...)
return removeZero(slice)
break
}
}
return slice
}

//判断一个值是否为零值,只支持string,float,int,time 以及其各自的指针,"%"和"%%"也属于零值范畴,场景是like语句
func IfZero(arg interface{}) bool {
if arg == nil {
return true
}
switch v := arg.(type) {
case int, int32, int16, int64:
if v == 0 {
return true
}
case float32:
r:=float64(v)
return math.Abs(r-0)<0.0000001
case float64:
return math.Abs(v-0)<0.0000001
case string:
if v == "" || v == "%%" || v == "%" {
return true
}
case *string, *int, *int64, *int32, *int16, *int8, *float32, *float64, *time.Time:
if v == nil {
return true
}
case time.Time:
return v.IsZero()
default:
return false
}
return false
}


如何将Go语言中删除切片特定元素和剔除零值操作合并为一个长尾?

本文共计290个文字,预计阅读时间需要2分钟。

如何将Go语言中删除切片特定元素和剔除零值操作合并为一个长尾?

gofunc remove(slice []interface{}, elem interface{}) []interface{} { if len(slice)==0 { return slice } for i, v :=range slice { if v==elem { slice=append(slice[:i], slice[i+1:]...) return remove(slice, elem) } } return slice}


func remove(slice []interface{}, elem interface{}) []interface{}{
if len(slice) == 0 {
return slice
}
for i, v := range slice {
if v == elem {
slice = append(slice[:i], slice[i+1:]...)
return remove(slice,elem)
break
}
}
return slice
}

func removeZero(slice []interface{}) []interface{}{
if len(slice) == 0 {
return slice
}
for i, v := range slice {
if ifZero(v) {
slice = append(slice[:i], slice[i+1:]...)
return removeZero(slice)
break
}
}
return slice
}

//判断一个值是否为零值,只支持string,float,int,time 以及其各自的指针,"%"和"%%"也属于零值范畴,场景是like语句
func IfZero(arg interface{}) bool {
if arg == nil {
return true
}
switch v := arg.(type) {
case int, int32, int16, int64:
if v == 0 {
return true
}
case float32:
r:=float64(v)
return math.Abs(r-0)<0.0000001
case float64:
return math.Abs(v-0)<0.0000001
case string:
if v == "" || v == "%%" || v == "%" {
return true
}
case *string, *int, *int64, *int32, *int16, *int8, *float32, *float64, *time.Time:
if v == nil {
return true
}
case time.Time:
return v.IsZero()
default:
return false
}
return false
}


如何将Go语言中删除切片特定元素和剔除零值操作合并为一个长尾?