在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 main
import (
"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 Abser
f := Vertex{3, 4}
a = &f
fmt.Println(f.Abs())
fmt.Println(f.Scale())
fmt.Println(a.Abs())
//fmt.Println(a.Scale())
}
Strings一个普通存在的接口,在 fmt 中定义
type Stringer interface {
String() string
}
完整示例
package main
import (
"fmt"
)
type Stringer interface {
String() string
}
type Cofox struct {
name string
}
func (c *Cofox) String() string {
return "Joel " + c.name
}
func main() {
var S Stringer
c := Cofox{"Smith"}
S = &c
fmt.Println(S.String())
fmt.Println(c.String())
fmt.Println(c.name)
}