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"中所述(这就是为什么您不能直接从
1 2 3 4 5 | var dataSlice []string = foo() var interfaceSlice []interface{} = make([]interface{}, len(dataSlice)) for i, d := range dataSlice { interfaceSlice[i] = d } |
考虑到
这是一个常见问题。
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的默认值)