#Goで型がインターフェイスの引数には値とポインタを渡すことができる
Goで関数の引数の型がインターフェイスの場合、その引数には値とポインタの両方を渡すことができます。
package main
import "fmt"
type IAdd interface {
Add(a, b int) int
}
type AddValue struct {}
func (t AddValue) Add(a, b int) int {
return a + b
}
type AddPointer struct {}
func (t *AddPointer) Add(a, b int) int {
return a + b
}
func f(a IAdd) {
fmt.Printf("%d\n", a.Add(1, 2))
}
func main() {
v := AddValue{}
f(v)
// 3
p := &AddPointer{}
f(p)
// 3
}