Go基础:接口相关

 

//  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)

}

posted on 2016-09-14 11:25  荆南山砍柴人  阅读(125)  评论(0编辑  收藏  举报

导航