在学习过程中,我遇到以下错误:
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) }
有人愿意帮助我继续前进吗?
不幸的是,您的错误有些令人误解。问题在于它是一个实例方法,您在调用它时就好像它是程序包作用域中的一个方法一样。
您需要这样的东西;
func main() { var in []byte jp := JSONParser{} actual, err2 := jp.Parse(in) }
我猜该错误的措辞是这样的,因为接收器(函数名称左侧位置中的括号中的内容)的处理方式与在后台传递给函数的任何其他参数一样。
如果您希望像这样调用您的方法,那么定义将是正确的,func Parse(toParse []byte) ([]Schema, int)并且如果该定义位于被调用的包中,JSONParser那么这将是正确的语法。如果在与您的示例相同的包中定义了它,则只需将其命名为Parse(in)
func Parse(toParse []byte) ([]Schema, int)
JSONParser
Parse(in)