gpt4 book ai didi

go - 从 slice 中移除接口(interface)项

转载 作者:行者123 更新时间:2023-12-01 21:15:45 34 4
gpt4 key购买 nike

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

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
知道怎么做吗?是否可以使用接受任何类型 slice 项目的通用单个函数?
引用: How to delete an element from a Slice in 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))
}

关于go - 从 slice 中移除接口(interface)项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63613974/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com