如何将数据从一个结构块移动到另一个结构?

时间:2017-06-26 08:45:37

标签: go

我有两个结构:

type A struct {
    Field1 string
    Field2 int
    Field3 int
}
type B struct {
    Field1 string
    Field2 int
}

我想将一段[] A数据(aData)转换为[] B数据片段(bData)。

这样做的惯用方法是什么?

我尝试的是this

var newItem B
var aData []A   
var bData []B


aData = [{"bob", 3, 4}, {"mary", 5, 2}] 


for i:=0 ; i < len(aData); i++ {

    newItem = {aData[i].Field1, aData[i].Field2}
    bData = append( bData, newItem )
}

但它给出了:

  

语法错误:缺少操作数

1 个答案:

答案 0 :(得分:4)

首先,您的代码无效。您需要aData声明的有效数组表达式,并且需要在分配给bData时指定类型。

aData := []A{{"bob", 3, 4}, {"mary", 5, 2}}
bData := make([]B, len(aData))

for i, aItem := range aData {
    bData[i] = B{
        Field1: aItem.Field1,
        Field2: aItem.Field2,
    }
}

除了语法错误之外,这更加惯用,因为:

  1. 它使用range而不是for循环,这非常适合迭代数组,更具可读性。
  2. bData已预先分配到所需的确切尺寸。
  3. 字段名称在bData的值声明中指定。对aData做同样的事情也会更为惯用,但它有点冗长。