2017-10-10 1 views
0

dieses Stück Code betrachten:append Wert schneiden eine Scheibe

func main() { 
    items := func1() 

    for _, v := range items { 
     v.Status = append(v.Status, false) 
    } 

    fmt.Println(items) 

} 

//TestCaseItem represents the test case 
type TestCaseItem struct { 
    Actual []string 
    Expected []string 
    Status []bool 
} 

func func1() []TestCaseItem { 
    var tc = make([]TestCaseItem, 0) 

    var item = &TestCaseItem{} 
    item.Actual = append(item.Actual, "test1") 
    item.Actual = append(item.Actual, "test2") 

    tc = append(tc, *item) 

    return tc 
} 

ich habe ein Stück vom Typ TestCaseItem Struktur. In dieser Struktur habe ich eine Schicht von String- und Bool-Eigenschaften. Zuerst rufe ich func1 Funktion, um einige Daten zu greifen und dann über diese Scheibe zu iterieren und versuchen, mehr Daten insdhed, aber die Ausgabe dieses Codes ist [{[test1 test2] [] []}] wo sind die booleans?

ich fühle mich wie das Problem ist []TestCaseItem cuz ist eine Scheibe, die Werte statt Zeiger hält und vielleicht werde ich etw vermissen. kann jemand das erklären?

Antwort

0

Sie fügen die Bool-Werte Kopien Ihrer TestCaseItems hinzu.

Sie müssen entweder einen Zeiger auf die Elemente verwenden:

func func1() []*TestCaseItem { 
    var tc = make([]*TestCaseItem, 0) 

    var item = &TestCaseItem{} 
    item.Actual = append(item.Actual, "test1") 
    item.Actual = append(item.Actual, "test2") 

    tc = append(tc, item) 

    return tc 
} 

Oder Sie müssen das Status Feld des TestCaseItem Wert anhängen, die in der Scheibe ist.

+0

ja das ist wahr, aber alle von ihnen sind Slices, so weit ich weiß Scheiben sind Verweise auf ein zugrunde liegendes Array, aber in diesem Fall beziehen sie sich nicht, warum ist das? – afrikaan

+0

@kyur: Es hat nichts mit dem Zeiger in der Scheibe selbst zu tun, Sie haben die 'TestCaseItem' Werte kopiert, was bedeutet, dass Sie nicht in die gleichen Scheibenwerte geschrieben haben. – JimB