недостаточно аргументов в вызове выражения метода

во время обучения go я пришел к следующей ошибке:

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

в моей тестовой программе (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)
}

1 ответов


ваша ошибка, к сожалению, несколько вводит в заблуждение. Проблема в том, что это метод экземпляра, и вы вызываете его, как будто это метод в области пакетов.

вам нужно что-то вроде этого;

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

Я предполагаю, что ошибка сформулирована так, потому что приемник (вещь в parens на левом сайте имени функции) обрабатывается как любой другой аргумент, передаваемый функции в фоновом режиме.

если вы хотите вызвать свой метод, как что определение будет просто func Parse(toParse []byte) ([]Schema, int) и если бы он был в пакете под названием JSONParser тогда это был бы правильный синтаксис. Если бы он был определен в том же пакете, что и в вашем примере, вы бы просто назвали его like Parse(in)