在调用方法表达式时没有足够的参数

Pet*_*vic 13 go

在学习的过程中,我遇到了以下错误:

prog.go:18: not enough arguments in call to method expression JSONParser.Parse 
Run Code Online (Sandbox Code Playgroud)

在我的测试程序中(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)
}
Run Code Online (Sandbox Code Playgroud)

有谁愿意帮助我继续前进?

eva*_*nal 16

遗憾的是,您的错误有些误导.问题是它是一个实例方法,你正在调用它,好像它是包范围内的方法.

你需要这样的东西;

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

我猜错误就是这样,因为接收器(函数名左侧网站上的parens中的东西)被处理,就像传递给后台函数的任何其他参数一样.

如果你想调用你的方法就像定义那样func Parse(toParse []byte) ([]Schema, int),如果它在一个被调用的包中,JSONParser那么这将是正确的语法.如果它在您的示例中的相同包中定义,您只需将其称为Parse(in)

  • 很好,thx的解释(一旦可能就会标记为正确) (2认同)