golang的interface
一、interface 定义 //接口是一个规范
type InterfaceName interface{
functionA()
functionB(param1 paramType)(returnType,returnType)
}
二、接口实现
2.1 通过结构体或者通过自定义类型实现接口,必须实现接口里的所有的方法
//1、定义接口
type Usb interface {
start()
stop()
}
//2、定义结构体(实现接口的结构体)
type Phone struct {
Name string
}
//3、定义实现接口中的方法
func (p Phone) start(){
fmt.Println(p.name,"start...")
}
func (p Phone) stop(){
fmt.Println(p.name,"stop!");
}
type Camera struct{}
func (c Camera)start(){
fmt.Println("相机 start...")
}
func (c Camera)stop(){
fmt.Println("相机 stop!")
}
三、使用
var p Phone = Phone{
Name: "小米",
}
p.start()
p.stop()
c := Camera{}
var c1 Usb = c // 如果Camera未实现两个方法(start stop),这里会报错 ( c1 Usb = c //相当于是 c 实现 Usb的接口,必须实现接口里的所有方法)
c1.start()
c1.stop()
四、空接口
4.1 空接口定义: 空接口不定义任何方法,没有定义任何方法的接口就是空接口;
空接口表示没有任何约束,因此任何类型变量都可以实现空接口
s := "您好,golang"
var usb Usb = s
fmt.Printf("type:%T, value,s: %v\n", usb, usb)
var i int = 10
usb = i
fmt.Printf("type:%T, value,s: %v\n", usb, usb)
空接口当做函数的参数来使用,也可以用来当做map的值来使用
package main
import (
"fmt"
)
//空接口
type Usb interface {
}
func main() {
s := "您好,golang"
var usb Usb = s
fmt.Printf("type:%T, value,s: %v\n", usb, usb)
var i int = 10
usb = i
fmt.Printf("type:%T, value,s: %v\n", usb, usb)
show("hello")
show(1000)
show(true)
var m1 = make(map[string]interface{})
m1["name"] = "mark"
m1["age"] = 30
m1["married"] = true
fmt.Printf("type:%T, m1: %v\n", m1, m1)
//类型断言
var x interface{}
x = 11
v, ok := x.(string)
if ok {
fmt.Printf("x就是一个%T类型,值是:%v\n", v, v)
} else {
fmt.Println("断言失败")
}
}
func show(a interface{}) {
fmt.Println(a)
// x.(type) 获取x的类型, x.(type) 只能放在switch 里面; 配合switch case 使用;
switch a.(type) {
case int:
fmt.Println("show ... int")
case string:
fmt.Println("show ... string")
case bool:
fmt.Println("show ... bool")
default:
fmt.Println("show ... 无效")
}
}
结果: