2016-07-29 3 views
6

Während go Lernen kam ich zu folgenden Fehler:nicht genug Argumente Aufruf der Methode Ausdruck

prog.go:18: not enough arguments in call to method expression JSONParser.Parse 

in meinem Testprogramm (https://play.golang.org/p/PW9SF4c9q8):

package main 


type Schema struct { 
} 

type JSONParser struct { 
} 

func (jsonParser JSONParser) Parse(toParse []byte) ([]Schema, int) { 
    var schema []Schema 
    // whatever parsing logic 
    return schema, 0 
} 

func main() { 
    var in []byte 
    actual, err2 := JSONParser.Parse(in) 
} 

Wer bereit, mir zu helfen, sich zu bewegen Hier?

Antwort

6

Ihr Fehler ist leider etwas irreführend. Das Problem ist, dass es sich um eine Instanzmethode handelt, die Sie aufrufen, als ob es sich um eine Methode im Paketbereich handelt.

Sie brauchen so etwas;

func main() { 
    var in []byte 
    jp := JSONParser{} 
    actual, err2 := jp.Parse(in) 
} 

ich den Fehler bin zu raten ist so formuliert, weil ein Empfänger (was in Pars auf der linken Stelle der Funktionsname) wie jedes andere Argument gehandhabt wird im Hintergrund eine Funktion übergeben werden.

Wenn Sie Ihre Methode so nennen möchten, wäre die Definition nur func Parse(toParse []byte) ([]Schema, int) und wenn es in einem Paket namens JSONParser wäre, dann wäre das die richtige Syntax. Wenn es im selben Paket wie in Ihrem Beispiel definiert wäre, würden Sie es einfach wie Parse(in)

+1

groß nennen, thx für Erklärung (wird als richtig markieren, sobald es möglich ist) –