一尘不染

调用方法表达式的参数不足

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)
}

有人愿意帮助我继续前进吗?


阅读 392

收藏
2020-07-02

共1个答案

一尘不染

不幸的是,您的错误有些令人误解。问题在于它是一个实例方法,您在调用它时就好像它是程序包作用域中的一个方法一样。

您需要这样的东西;

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

我猜该错误的措辞是这样的,因为接收器(函数名称左侧位置中的括号中的内容)的处理方式与在后台传递给函数的任何其他参数一样。

如果您希望像这样调用您的方法,那么定义将是正确的,func Parse(toParse []byte) ([]Schema, int)并且如果该定义位于被调用的包中,JSONParser那么这将是正确的语法。如果在与您的示例相同的包中定义了它,则只需将其命名为Parse(in)

2020-07-02