golang接口使用说明

接口在golang中使用的特别多,在此加以简单的总结:

golang接口使用说明:

(1)空接口(没有任何方法的接口)可以看成是万能数据类型,可以接收任意类型的数据;如果是包含方法的接口,给该接口赋值,对应的值对象需要实现该接口的所有方法才可以。

 (2)接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例)

(3)接口中的所有方法都没有方法体,即都是没有实现的方法。

(4)在golang中,一个自定义类型需要将该接口对应的方法都实现,才能说该类型实现了该接口。

(5)只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型。

(6)一个自定义类型,可以同时实现多个接口。(如可以同时实现 A接口  B接口)

(7)若两个接口包含一样的方法,一个自定义类型实现了所有的方法,则该类型实现了这两个接口。接口的实现主要是通过方法来标记,而不是接口名称。

(8)接口类型默认是一个指针(引用类型),如果没有初始化就使用,就会输出nil。

(9)golang接口中,不能包含任意变量。

package main

import "fmt"

type USB interface {
	working()
	stop()
}
type USB1 interface {
	working()
	stop()
}

//定义Phone对象
type Phone struct {
}

//定义Cameron对象
type Cameron struct {
}

//定义Computer对象
type Computer struct {
}

//分别让两个对象实现USB的方法
func (p Phone) working() {
	fmt.Println("手机开始工作。。。")
}
func (p Phone) stop() {
	fmt.Println("手机停止工作")
}
func (c Cameron) working() {
	fmt.Println("照相机开始工作。。。")
}
func (c Cameron) stop() {
	fmt.Println("照相机停止工作")
}
func (c Computer) work(usb USB) { //具有相同接口的对象(struct)都可以作为函数参数(包含多态、高内聚低耦合的思想)
	usb.working()
	usb.stop()
}

//自定义类型的变量 都可以实现接口,不一定是struct
type MyInt int

func (i MyInt) working() {
	fmt.Println("自定义类型的  working() 方法")
}
func (i MyInt) stop() {
	fmt.Println("自定义类型的  stop() 方法")
}
func main() {
	c := Computer{}
	ca := Cameron{}
	ph := Phone{}
	c.work(ca) //由于Cameron实现了USB的接口,所以类型可以和USB进行匹配
	c.work(ph) //由于phone实现了USB的接口,所以类型可以和USB进行匹配
	fmt.Println("------------")
	var usb USB
	var myInt MyInt
	usb = myInt //赋值给接口(包含方法),myInt需要实现该接口的所有方法。
	usb.stop()
	myInt.working()
}

/*
    特别说明:  golang中实现接口不需要显示来实现(Java中通过关键字,golang中接口对应的方法来实现)
                如程序所示,对象通过 working()、stop()方法的实现,实现了接口USB、USB1.所以,接口与接口的方法相关,与接口名称无关。
                如果要实现接口,就要实现接口里的所有方法。

*/

猜你喜欢

转载自blog.csdn.net/weixin_42117918/article/details/85221323
今日推荐