```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
你写的姿势不对啊,你用最无意义的 interface{} 当然没法搞了。但是假设定义一个接口 type Shape interface{ area() int } ,然后 [2]Shape ,不就可以 for...range 了。
#1
更多评论