加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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 {}参数则不会.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读