go - 如何将接口传递给有很多参数的方法
问题描述
我编写了一个惰性代码来演示我必须实现接口的问题。我有方法 M1、M2 以结构 X 作为参数并具有结构 Y 类型。我希望所有这些方法都由单个接口 I 实现。问题是实现接口的方法 M 我需要注意需要传递给子方法(M1,M2)的参数。我收到一个错误:<argument name> used as a value
当我在 M 中传递多个参数时
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
被声明为没有返回值:
type I interface {
M1(x X)
M2(x X)
}
Println
当然,如果函数没有返回任何内容,您不能将函数调用作为参数传递: fmt.println(i.M1(x))
。更改示例中的接口声明以返回某些内容(以及更多修复*):
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
为 returnint
而不是struct
并修复带有接收器的函数声明的语法
推荐阅读
- jquery - BxSlider 没有在谷歌浏览器中显示图像
- python - 如何从其他 2 个列表中创建元素列表
- macos - MacOS的TTrayIcon?
- flutter - 如何捕捉颤动的 video_player 插件错误?
- excel - 如何在列中查找多个值并返回结果?我尝试使用数组公式,但它导致 Excel 渲染速度太慢
- spring - 当我使用 modelAttribute="student" 时,如何修复“HTTP 状态 500 – 内部服务器错误”
- java - Spring Data REDIS - 具有奇怪前缀的哈希键,并且 HSCAN 无法正确返回结果
- java - 将大型机签名字符转换为Java中相应整数值的最佳方法是什么
- c# - 如何使序列化数据紧凑?
- syntax-highlighting - nano 可以通过 shebang 检测没有扩展名的文件类型以进行正确的语法突出显示吗?