当golang将struct转换为interface {}时会发生什么?费用是多少?

时间:2016-06-14 09:35:21

标签: go struct interface

我对界面{}类型感到困惑,
如何从Person结构构建一个interface {}对象?
如果结构非常大,转换成本是否昂贵

type Person struct {  
  name string  
  age  int  
} 

func test(any interface{}) {  

} 

func main() {  
    p := Person{"test", 11}
    // how to build an interface{} object from person struct? 
    // what is the cost? the field need copy?
    test(p) 
}

1 个答案:

答案 0 :(得分:2)

接口{}是一种类型。它由两部分组成:基础类型和基础价值。尺寸无关紧要。成本是每次转换它或它,你需要付出代价。在从struct到interface底层值复制期间,大小效果的一个方面是值。但是,此成本与分配给结构或复制到结构时获得的成本类似。接口的额外成本不受尺寸的影响。

您不需要转换功能,您可以将其转换为:

func main() {
    p := Person{"test", 11}
    // how to build an interface{} object from person struct?
    // what is the cost? the field need copy?
    var v interface{}
    v = p    
}