```package main
import "fmt"
type square struct { r int }
type circle struct { r int }
func (s square) area() int { return s.r * s.r }
func (c circle) area() int { return c.r * 3 }
func main() {
s := square{1}
c := circle{1}
a := [2]interface{}{s, c}
fmt.Println(s, c, a)
sum := 0
for _, t := range a {
switch v := t.(type) {
case square:
sum += v.area() // 这一行,和 case circle 中的那行是一模一样的,为什么不能把 switch 删掉,直接使用 t.area() 来计算呢?
case circle:
sum += v.area()
}
}
fmt.Println(sum)
}
```
比如:
```for _, t:= range a {
sum += t.area() // 如果这样做了,那么这里就会报错:t.area undefined (type interface {} is interface with no methods)
}
```
为什么会这样呢?求指点
代码来自:http://www.infoq.com/cn/articles/go-interface-talk
有疑问加站长微信联系(非本文作者)