Go学习笔记—接口

Go学习笔记—接口


接口是方法的集合。

接口是一种抽象的类型,只关心方法,不关心数据。只知道的是它的方法能做什么。

接口的定义:

每个接口由数个方法组成,其定义格式如下:

type 接口类型名 interface{
    
    
    方法名1( 参数列表1 ) 返回值列表1
    方法名2( 参数列表2 ) 返回值列表2}
  • 接口名:使用type将接口定义为自定义的类型名。Go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有字符串功能的接口叫Stringer等。接口名最好要能突出该接口的类型含义。
  • 方法名:当方法名首字母是大写且这个接口类型名首字母也是大写时,这个方法可以被接口所在的包(package)之外的代码访问。
  • 参数列表、返回值列表:参数列表和返回值列表中的参数变量名可以省略。
//定义接口实现方法
//只要实现这两个方法的类型都可以是geometry类型
type geometry interface {
    
    
	area() float64
	perim() float64
}

接口的实现:

只要接口实现了对象的所有方法,就是实现了这个接口。

//定义接口实现方法
//只要实现这两个方法的类型都可以是geometry类型
type geometry interface {
    
    
	area() float64
	perim() float64
}

//自定义结构体类型
type rectangle struct{
    
    
	width,height float64
}

//自定义结构体类型
type circle struct{
    
    
	radius float64
}

//计算矩形面积方法
func (r rectangle) area() float64 {
    
    
	return r.width*r.height
}

//计算矩形周长方法
func (r rectangle) perim() float64 {
    
    
	return 2*r.width+2*r.height
}

//计算圆形面积方法
func (c circle) area() float64 {
    
    
	return math.Pi*c.radius*c.radius
}

//计算圆形周长方法
func (c circle) perim() float64 {
    
    
	return 2*math.Pi*c.radius
}

在例子中,可以看出,我们给rectanglecircul创建了两个方法area()perim(),在接口geometry中,实现了这两个方法,也就是接口实现了。

接口类型变量:

接口类型变量能够存储所有实现了该接口的实例。

//g 就是一个接口类型变量
func measure(g geometry){
    
    
	fmt.Println(g)
	fmt.Println(g.area())
	fmt.Println(g.perim())
}
//接口类型变量作为函数的参数
//实现接口的方法
func main()  {
    
    
	r := rectangle{
    
    3,4}
	c := circle{
    
    5}

	measure(r)
	measure(c)
}

//{3 4}
//12
//14
//{5}
//78.53981633974483
//31.41592653589793

猜你喜欢

转载自blog.csdn.net/weixin_46435420/article/details/119515908