接口的定义
在golang中接口(interface)是一种类型,
package main
import "fmt"
type Usber interface {
start()
stop()
}
// 如果接口里面有方法的话,必要通过结构体或者自定义类型实现这个接口
type Phone struct{
Name string
}
type Camera struct {
}
// 手机要实现usb接口的话必须得实现usb接口中的所有方法
func (p Phone) start() {
fmt.Println(p.Name,"启动")
}
func (p Phone) stop(){
fmt.Println(p.Name,"关机")
}
func (p Camera) start() {
fmt.Println("相机启动")
}
func (p Camera) stop(){
fmt.Println("相机关机")
}
func main(){
p := Phone{
Name:"华为手机",
}
//p.start() // 华为手机 启动
var p1 Usber // golang 中接口就是一个数据类型
p1 = p // 表示手机实现Usb接口
p1.start() // 华为手机 启动
c := Camera{}
var c1 Usber = c // 表示相机实现了Usb接口
c1.start() // 相机启动
}
package main
import "fmt"
type Usber interface {
start()
stop()
}
// 手机
type Phone struct{
Name string
}
// 相机
type Camera struct {
}
// 电脑
type Computers struct {
}
// 手机要实现usb接口的话必须得实现usb接口中的所有方法
func (p Phone) start() {
fmt.Println(p.Name,"启动")
}
func (p Phone) stop(){
fmt.Println(p.Name,"关机")
}
func (p Camera) start() {
fmt.Println("相机启动")
}
func (p Camera) stop(){
fmt.Println("相机关机")
}
func (c Computers) work(usber Usber){
usber.start()
usber.stop()
}
func main(){
// 实例化结构体
var computer = Computers{}
var phone = Phone{Name: "苹果手机"}
var camera = Camera{}
computer.work(phone) // 苹果手机 启动 苹果手机 关机
computer.work(camera) // 相机启动 相机关机
}
空接口
golang中接口可以不定义任何方法,没有定义任何方法的接口就是空接口,空接口表示没有任何约束,因此任何类型变量都可以实现空接口
空接口在实际项目中用的非常多,用空接口可以表示任何数据类型
package main
import "fmt"
// 空接口作为函数的参数
func show(a interface{}){
fmt.Printf("值:%v 类型:%T\n",a,a)
}
func main(){
show(20) // 值:20 类型:int
show("你好golang") // 值:你好golang 类型:string
slice := []int{1,2,3,4}
show(slice) // 值:[1 2 3 4] 类型:[]int
}
package main
import "fmt"
func main(){
var m1 = make(map[string]interface{})
m1["username"] ="张三"
m1["age"] = 28
m1["married"] = true
fmt.Println(m1) // map[age:28 married:true username:张三]
}
未完