首页 > 解决方案 > 从切片中移除接口项

问题描述

我想删除切片中的一个项目,而不必为切片中的每种类型的项目使用特定的函数。所以,我使用 interface{} 作为切片项目类型:

package main

import "fmt"

func sliceRemoveItem(slice []interface{}, s int) []interface{} {
  return append(slice[:s], slice[s+1:]...)
}

func main() {
  array := []int{1,2,3,4,5,6,7}

  fmt.Println(array)
  fmt.Println(sliceRemoveItem(array,1))
}

但是 goLang 不喜欢它:

./prog.go:13:30: cannot use array (type []int) as type []interface {} in argument to sliceRemoveItem

https://play.golang.org/p/wUrR5iGRZ5Y

知道怎么做吗?是否可以使用接受任何类型切片项目的通用单个函数?

Refs:如何从 Golang 中的切片中删除元素

标签: gotypesslicego-interface

解决方案


您正在尝试将切片int作为interface{}. Go 不会隐式执行此转换,因为它是一项昂贵的操作。

看看这个答案:https ://stackoverflow.com/a/12754757

您可以接受[]interface{},但显式进行转换,或者将类型指定为[]int。这有效:

package main

import "fmt"

func sliceRemoveItem(slice []int, s int) []int {
  return append(slice[:s], slice[s+1:]...)
}

func main() {
  array := []int{1,2,3,4,5,6,7}

  fmt.Println(array)
  fmt.Println(sliceRemoveItem(array,1))
}

推荐阅读