将结构复制到实现接口的结构中

时间:2016-10-27 15:15:59

标签: go

我目前正在尝试将结构复制到另一个实现接口的结构中。我的代码如下:

     package main

     import (
         "fmt"
     )

     type intf interface {
         SaySomething(string)
         LaunchTheDevice(origin)
     }

     type destination struct{
         origin
     }

     func (dest *destination) SaySomething(s string) {
         fmt.Println("I'm saying --> ",s)
     }

     func (dest *destination) LaunchTheDevice(theOrigin origin) {
        *dest = theOrigin
     }

     type origin struct{
         name string
         value string
         infos string   
     }

     func main() {
         firstValue:= new(origin)
         firstValue.name = "Nyan"
         firstValue.value = "I'm the only one"
         firstValue.infos = "I'm a cat"

         secondValue := new(destination)
         secondValue.LaunchTheDevice(*firstValue)
     }

我希望函数LaunchTheDevice()设置destination的值。但是当我运行我的代码时,我收到了这个错误:

cannot use theOrigin (type origin) as type destination in assignment

那我该怎么做呢?为什么我不能运行我的代码?我不明白,因为我可以输入

dest.name = "a value"
dest.value = "another value"
dest.infos = "another value"

但是dest=theOrigindest具有与theOrigin相同的结构时不起作用。

提前致谢!

1 个答案:

答案 0 :(得分:3)

字段origin是嵌入字段。应用程序可以使用以下代码设置字段:

 func (dest *destination) LaunchTheDevice(theOrigin origin) {
    dest.origin = theOrigin
 }

嵌入字段的名称与类型名称相同。