2016-10-20 6 views
0

Ich war gezwungen, einen bestimmten Typ für []string zu definieren, weil ich einen benutzerdefinierten YAML-Parser für den strSlice-Typ implementiert habe.Umwandlung von 2D-Slice-Typen in go

Nun muss ich []strSlice zurück in [][]string werfen, aber der Go-Compiler 1.7.1 lehnen es als Fehler ab.

type strSlice []string 
var x1 []strSlice 
var x2 [][]string 
... 
x2 = [][]string(x1) 

Wie kann ich den Cast-Vorgang durchführen?

Antwort

2

Sie verwenden einen benannten Typ eines String Slice. Sie müssen jeden Eintrag in x1 zurück zu einem []string ersten konvertieren:

type strSlice []string 
var x1 []strSlice 
var x2 [][]string 
... 
for _, s := range x1 { 
    x2 = append(x2, []string(s)) 
} 

https://play.golang.org/p/5iJT2Hsv1R

Leider gibt es keine Möglichkeit gibt, diese in einem Schuss zu tun, denn jeder des Indizes in x1 ist ein strSlice Typ, und müssen in einen []string Typ konvertiert werden, um in x2 gespeichert zu werden. Go lässt Sie das nicht in einer einzigen Operation machen, weil die Entwickler O (n) -Operationen nicht in syntaktischem Zucker verstecken wollten.