go - 从切片中移除接口项
问题描述
我想删除切片中的一个项目,而不必为切片中的每种类型的项目使用特定的函数。所以,我使用 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 中的切片中删除元素
解决方案
您正在尝试将切片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))
}
推荐阅读
- android - 找不到资源 ID - Android Gradle Plugin 3.4.0
- jquery - HTML、CSS 和 JQuery 中的另一个图像库
- php - 如何将 php 变量作为 wget url 传递?
- clojure - clojure:在地图向量中搜索
- c - Valgrind 显示错误调用 pr_set_ptracer,vgdb 可能会阻塞
- reactjs - 无法读取未定义的属性“地图”,错误
- jquery - 使用fadeIn和fadeOut隐藏和显示div不起作用
- parallel-processing - slurm Job Array 和 Job Step 性能的差异
- python - 如何使用 BeautifulSoup 在网页抓取中找到元素的价值?
- python - Python脚本的保证设法完成读取已删除的文件