【问题标题】:How to fix golang too many arguments error如何修复golang太多参数错误
【发布时间】:2017-08-11 14:56:15
【问题描述】:

我正在使用以下代码...

package main

import (
"fmt"
)

type traingle interface {
area() int
}

type details struct {
height int
base   int
}

func (a details) area() int {

s := a.height + a.base
fmt.Println("the area is", s)
return s

}

func main() {
r := details{height: 3, base: 4}
var p1 traingle
p1.area(r)

}

不明白为什么会出现以下错误

调用 p1.area 的参数太多 有(详情) 想要()

我假设三角形的 p1 对象可以使用参数调用 area() 方法。不明白为什么会失败。

【问题讨论】:

  • p1是一个nil接口,它不能调用任何东西。

标签: go


【解决方案1】:

试试这个:

package main

import (
    "fmt"
)

type shape interface {
    area() int
}

type traingle struct {
    height int
    base   int
}

func (a traingle) area() int {
    return a.height * a.base / 2    
}

func main() {
    var p1 shape = traingle{height: 3, base: 4}
    fmt.Println(p1.area())
}

输出:

6

并在形状上查看此线程示例:https://stackoverflow.com/a/38818437/8208215

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    函数area 在其定义中不接受任何参数:

    area() int
    // ...
    func (a details) area() int {
    

    因此,正如错误所说,向它传递任何参数都是过多的参数。函数中没有任何地方使用参数。它基于接收器的属性进行所有计算,而不是任何参数。您还在未初始化 (nil) 接口值上调用它。看起来你想要的可能是:

    r := details{height: 3, base: 4}
    r.area()
    

    【讨论】:

      猜你喜欢
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多