我有两个结构:
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 )
}
但它给出了:
语法错误:缺少操作数
答案 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,
}
}
除了语法错误之外,这更加惯用,因为:
range
而不是for
循环,这非常适合迭代数组,更具可读性。bData
已预先分配到所需的确切尺寸。bData
的值声明中指定。对aData
做同样的事情也会更为惯用,但它有点冗长。