2017-08-11 17 views
0

我用下面的代碼...如何修復golang參數太多錯誤

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 有(詳細信息) want()

我假設三角形的p1對象可以調用具有參數的area()方法。不明白爲什麼它失敗了。

+1

'p1'是一個無界面,它不能調用任何東西。 – JimB

回答

2

試試這個:

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

希望這有助於。

+1

真棒..謝謝 – user2315104

6

功能area不帶任何參數的定義中:

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

爲此,傳遞任何參數給它,因爲錯誤說,太多的爭論。函數中沒有任何地方使用參數。它根據接收器的屬性進行所有計算,而不是任何參數。你也在一個未初始化的(無)接口值上調用它。它看起來像你想要的大概是:

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