types – 为什么[]字符串无法转换为golang []中的[] interface {
发布时间:2020-12-16 09:29:00 所属栏目:大数据 来源:网络整理
导读:参见英文答案 Cannot convert []string to []interface {}????????????????????????????????????5个 我发现它很奇怪,为什么[]字符串无法转换为[] interface {}? 我认为这应该是可能的,因为: 他们都是切片 []字符串的每个元素都是字符串,当然是接口{} 但在
参见英文答案 >
Cannot convert []string to []interface {}????????????????????????????????????5个
我发现它很奇怪,为什么[]字符串无法转换为[] interface {}? 我认为这应该是可能的,因为: >他们都是切片 但在下面的示例中,它将是编译错误 func f(args ...interface{}){ } s := []string{"ssd","rtt"} f(s...) 为什么语言无法自动完成转换? 解决方法
因为[] string和[] interface {}具有不同的内存布局.当您意识到interface {}变量需要知道它包含的值的类型时,这是显而易见的.
对于[]字符串切片,后备数组只需要保存单个字符串.对于[] interface {}切片,您既有类型信息又有字符串值(嗯,指向字符串值的指针,因为字符串大于单个内存字).因此,从一种类型转换为另一种类型将涉及复制数据. Go会自动执行转换会让人感到困惑,因为它会使代码难以推理.例如,函数调用f(s)可以修改切片中的字符串,如果它被声明为采用[]字符串参数,但是如果它被声明为采用[] interface {}参数则不会. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |