为什么使用Go接口{}作为参数,当我用字符串调用func时,它会转换一个alloc/ns吗?

Jas*_*nXU 4 go

我有一个Go接口函数,它以接口{}作为参数.当我用字符串调用函数时,它将转换一个alloc/ns.为什么?

   func foo(...interface{}) error {
       ....
   }

   func use() {
     var str = "use it"
     e := foo(str)
     _ = e
   }
Run Code Online (Sandbox Code Playgroud)

Jam*_*dge 5

在内部,接口变量是双字结构.第一个单词是指向有关变量动态类型的信息的指针.第二个单词将(a)包含变量的动态值(如果它适合单词),或(b)包含指向存储器的指针,如果它更大则保存动态值.

字符串变量大于单词,因为它包含它的长度和指向底层字符数据的指针.因此,在接口变量中存储字符串涉及分配一些内存来保存该值.