2017-02-15 1 views
-2

Ich habe die folgende Funktion:Zeiger auf Scheiben schneiden von Schnittstellen in Funktionsparameter

func read(filePath string, structure *[]interface) { 
    raw, err := ioutil.ReadFile(filePath) 
    if err != nil { 
     fmt.Println(err.Error()) 
     os.Exit(1) 
    } 
    json.Unmarshal(raw, structure) 
} 

Welche ich so nennen:

indexes := []Index 
    read(path + "/" + element + ".json", &indexes) 

Allerdings bin ich seltsame Fehler erhalten, die verschwinden, wenn ich nehmen aus structure *[]interface aus der Funktionsdeklaration:

./index.verb.go:73: syntax error: unexpected), expecting { 

denke ich, etwas wront, wenn ich versuche, einen Punkt zu passieren zu einem Stück generischen Typs. Wie soll ich es dann machen? Ich kann structure *[]Index nicht tun, weil es andere Typen will ich wieder zu

+0

, wenn Sie laufen 'gehen fmt' es Ihnen die genaue Lage Ihrer Syntaxfehler sagen wird, und in diesem Fall auch das, was Charakter erwartet. – JimB

+0

@ JimB danke! –

Antwort

1

Deklarieren Sie die Funktion wie folgt aus:

func read(filePath string, structure interface{}) error { 
    raw, err := ioutil.ReadFile(filePath) 
    if err != nil { 
    return err 
    } 
    return json.Unmarshal(raw, structure) 
} 

Der structure Wert wird bis zum json.Unmarshal geleitet und kann jede Art von json.Unmarshal unterstützt werden.

Nennen Sie es wie folgt aus:

var indexes []Index 
err := read(path + "/" + element + ".json", &indexes) 
if err != nil { 
    fmt.Println(err.Error()) 
    os.Exit(1) 
} 
Verwandte Themen