// interface相关
package main
import ( "fmt" "math" )
// 接口,定义了method
// 该接口类型的值必须实现里面定义的method
type Abser interface{ Abs() float64 }
type MyFloat float64
type Vertex struct{ X, Y float64 }
// MyFloat实现Abs方法
func (f MyFloat) Abs() float64 {
if f < 0{ return float64(-f) } return float64(f) }
// *Vertex 实现Abs方法
func (v *Vertex) Abs() float64
{ return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func describe(i interface{})
{ fmt.Printf("%v, %T\n",i ,i) }
func main()
{ var a, b Abser
f := MyFloat(-math.Sqrt2)
fmt.Println("======f=", f)
v := Vertex{3,4}
a = f fmt.Println("======a.Abs=", a.Abs())
b = &v fmt.Println("======b.Abs=", b.Abs())
// 空的接口, 没有制定要实现的方法,可以接受任何类型
var emptyInterface interface{}
describe(emptyInterface)
emptyInterface = 12
describe(emptyInterface)
emptyInterface = "wolfan"
describe(emptyInterface)
}