2017-06-26 123 views
0

我有兩個結構:如何將數據從一個結構體移動到另一個結構體?

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

我要轉換的[]的切片的數據(aData)至(bData)B數據的[]的切片。

這樣做的習慣用法是什麼?

我想什麼是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) 
} 

但它給:

syntax error: missing operand

回答

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也是這樣做的,這會更加地道,但它會有點冗長。
相關問題