2017-02-23 4 views
3

Ich versuche, eine Funktion zu erstellen, die alle key, value eines map als slice von slice von Tupeln zurückgibt (wobei jedes Tupel {key, value})eine Scheibe Scheibe Schnittstellen in go Erstellen

Hier ist der Code :

func ReturnTuples(map_ map[interface{}]interface{}) [][]interface{} { 
    toReturn := []([]interface{}) 
    ... 

Aber ich bin immer Fehler für die toReturn Linie:

type [][]interface {} is not an expression 

Wie soll ich ein Stück Schnittstellendecke deklarieren? Ich sehe das als den einzigen Weg. Ich versuchte ohne Klammern wie:

[][]interface{} 

aber es wird auch nicht funktionieren.

Ich habe versucht, auf Google nach 'Golang Scheibe der Scheibe' zu suchen, aber sehr wenige Dinge erscheinen. Zum Beispiel habe ich nur gefunden, wie man eine einfache aus uint8, die ist: [][]uint8.

+0

Warum die negative Stimme? Wie soll ich es wissen? Ich habe [] ([] interface {}) {} ausprobiert, was am intuitivsten war, aber nicht funktioniert hat. Ich habe auch bei Google nichts gefunden. –

+0

Ich bin nicht derjenige, der downvooted, aber hast du wirklich versucht, [] ([] Schnittstelle {}) {} '? Weil das funktioniert ... [Go Playground] (https://play.golang.org/p/z8XInz95Gg) – icza

+0

@icza Ja, ich habe es versucht, aber ich erinnere mich nicht, ob der Fehler genau derselbe war wie meiner jetzt, aber danke :) –

Antwort

3

Der Elementtyp des Slice ist interface{}, so dass ein composite literal ein zusätzliches Paar Klammern benötigt: []interface{}{}.

Bei Scheibe Scheiben:

toReturn := [][]interface{}{} 

Oder wenn make() verwenden, geben Sie eine Typ (und kein Verbund wörtliche):

toReturn := make([][]interface{}, 0, len(map_)) 
+0

Wenn Sie nur hinzufügen, können Sie auch 'var toReturn [] [] interface {}' wenn Sie sich nicht mit der Initialisierung kümmern wollen. – gkats

2

Sie erstellen eine Instanz Wenn Sie keinen Typ definieren, benötigen Sie ein zusätzliches geschweiftes Klammerpaar, um die Variable zu initialisieren:

toReturn := [][]interface{}{}