在go语言中,接口类型是由一组方法定义的集合。
一个类型是否实现了一个接口,就看这个类型是否实现了接口中定义的所有方法。在go语言中,无需特别的指明。
定义一个接口
type Abser interface {Abs() float64}
定义一个结构体
type Vertex struct {X, Y float64}
定义两个方法
一个是结构体指针
一个是结构体。
func (v *Vertex) Abs() float64 {return v.X * v.X + v.Y * v.Y}func (v Vertex) Scale() float64 {return v.X + v.Y}
声明一个接口变量
var a Abser
完整示例
package mainimport ("fmt")type Abser interface {Abs() float64}type Vertex struct {X, Y float64}func (v *Vertex) Abs() float64 {return v.X * v.X + v.Y * v.Y}func (v Vertex) Scale() float64 {return v.X + v.Y}func main() {var a Abserf := Vertex{3, 4}a = &ffmt.Println(f.Abs())fmt.Println(f.Scale())fmt.Println(a.Abs())//fmt.Println(a.Scale())}
Strings一个普通存在的接口,在 fmt 中定义
type Stringer interface {String() string}
完整示例
package mainimport ("fmt")type Stringer interface {String() string}type Cofox struct {name string}func (c *Cofox) String() string {return "Joel " + c.name}func main() {var S Stringerc := Cofox{"Smith"}S = &cfmt.Println(S.String())fmt.Println(c.String())fmt.Println(c.name)}

