使用字符串切片,其中需要一片空接口

时间:2014-09-23 20:24:51

标签: go slice

我正在尝试使用我在网络上找到的带有一串字符串的集合库。该集合意味着能够采用泛型类型,但是当我尝试传入一段字符串时,我得到:

不能在mapset.NewSetFromSlice的参数中使用group_users(type [] string)作为类型[] interface {}

有没有办法使用该函数而不创建一个新的切片,其元素是类型interface {}?

可在此处找到集合库:

我知道这可能很简单,我做错了但我似乎无法找到答案

2 个答案:

答案 0 :(得分:1)

  

有没有办法在不创建元素类型为interface{}的新切片的情况下使用该函数?

不是真的:您可能需要将您的字符串切片转换为接口切片,如“InterfaceSlice”中所述(这就是为什么您不能直接从[]Type转到{ {1}}):

[]interface{}

考虑how an interface{} is structured,您无法快速将一个切片转换为另一个切片。

这是FAQ

答案 1 :(得分:0)

VonC是正确的,但如果你真的只想要一个字符串切片,那么实现起来相当简单

这是StringSet on play

的简单版本

基本思路是制作一个Type - >的地图。 bool(或者我认为空结构会更节省空间,但bool更容易使用/类型)

关键部分是:

type StringSet map[string]bool
func (s StringSet) Add(val string) {
    s[val] = true
}

然后,检查存在可以像s [" key"]一样简单,因为如果它存在则返回bool true,如果不存在则返回false(由于false是bool的默认值)