如何将接口传递给有很多参数的方法
How to pass interface to method that have lot of arguments
我写了一个惰性代码来演示我必须实现接口的问题。我有方法 M1、M2,它们将结构 X 作为参数并具有结构 Y 的类型。我希望所有这些方法都由单个接口 I 实现。问题是实现接口的方法 M 我需要注意需要传递给子方法 (M1,M2) 的参数。当我在 M
中传递多个参数时,出现错误:<argument name> used as a value
type Y struct {
a int
}
type X struct {
a int
}
(y *Y) func M1(x X) struct {
return y.a+x.a
}
(y *Y) func M2(x X) struct {
return y.a*x.a
}
type I interface {
M1(x X)
M2(x X)
}
func M(i I, x X) {
fmt.println(i.M1(x)) //returns an error i.M1(x) used as a value
fmt.println(i.M2(x)) //returns an error i.M2(x) used as a value
}
在您的示例中导致 <argument name> used as a value
错误的问题是,形成接口 I
的函数被声明为没有 return 值:
type I interface {
M1(x X)
M2(x X)
}
如果函数 return 什么都没有:fmt.println(i.M1(x))
,您当然不能将函数调用作为 Println
的参数传递。将示例中的接口声明更改为 return 某些内容(以及更多修复*):
type Y struct {
a int
}
type X struct {
a int
}
func(y *Y) M1(x X) int {
return y.a+x.a
}
func(y *Y) M2(x X) int {
return y.a*x.a
}
type I interface {
M1(x X) int
M2(x X) int
}
func M(i I, x X) {
fmt.Println(i.M1(x))
fmt.Println(i.M2(x))
}
*) 将 M1
& M2
更改为 return int
而不是 struct
并修复带有 receiver
的函数声明语法
我写了一个惰性代码来演示我必须实现接口的问题。我有方法 M1、M2,它们将结构 X 作为参数并具有结构 Y 的类型。我希望所有这些方法都由单个接口 I 实现。问题是实现接口的方法 M 我需要注意需要传递给子方法 (M1,M2) 的参数。当我在 M
中传递多个参数时,出现错误:<argument name> used as a value
type Y struct {
a int
}
type X struct {
a int
}
(y *Y) func M1(x X) struct {
return y.a+x.a
}
(y *Y) func M2(x X) struct {
return y.a*x.a
}
type I interface {
M1(x X)
M2(x X)
}
func M(i I, x X) {
fmt.println(i.M1(x)) //returns an error i.M1(x) used as a value
fmt.println(i.M2(x)) //returns an error i.M2(x) used as a value
}
在您的示例中导致 <argument name> used as a value
错误的问题是,形成接口 I
的函数被声明为没有 return 值:
type I interface {
M1(x X)
M2(x X)
}
如果函数 return 什么都没有:fmt.println(i.M1(x))
,您当然不能将函数调用作为 Println
的参数传递。将示例中的接口声明更改为 return 某些内容(以及更多修复*):
type Y struct {
a int
}
type X struct {
a int
}
func(y *Y) M1(x X) int {
return y.a+x.a
}
func(y *Y) M2(x X) int {
return y.a*x.a
}
type I interface {
M1(x X) int
M2(x X) int
}
func M(i I, x X) {
fmt.Println(i.M1(x))
fmt.Println(i.M2(x))
}
*) 将 M1
& M2
更改为 return int
而不是 struct
并修复带有 receiver