关于go:在需要空接口切片的地方使用字符串切片

Using a string slice where a slice of empty interface is expected

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

在mapset.newsetfromslice的参数中,不能将group_users(type[]string)用作type[]interface

是否有一种方法可以在不创建元素为interface类型的新切片的情况下使用函数?

集合库可以在这里找到:

我知道这很可能是我做错了一件简单的事情,但我似乎找不到答案。


Is there a way to use the function without creating a new slice with the elements being type interface{}?

不完全是:您可能需要将字符串切片转换为接口切片,如"interface slice"中所述(这就是为什么您不能直接从[]Type转到[]interface{}的原因):

1
2
3
4
5
var dataSlice []string = foo()
var interfaceSlice []interface{} = make([]interface{}, len(dataSlice))
for i, d := range dataSlice {
    interfaceSlice[i] = d
}

考虑到interface{}的结构,您不能快速地将一个切片转换为另一个切片。

这是一个常见问题。


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

这是一个正在播放的简单版本的字符串集

基本的想法是制作一个类型->bool的映射(或者我认为一个空结构会更节省空间,但是bool更容易使用/类型)

关键部分是:

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

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