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 ... 无效")

	}
}

结果:

posted @ 2022-05-15 15:33  amu2018  阅读(26)  评论(0编辑  收藏  举报