GO语言interface

接口特性
(1)接口是一个或多个方法签名的集合
(2)只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,称为Structural Typing
(3)接口只有方法声明没有实现,没有数据字段
接口实现的例子

package main

import "fmt"

type USB interface{
  Name() string
  Connect()
}

type PhoneConnector struct{
  name string
}

func (pc PhoneConnector )Name()string{
  return pc.name
}

func (pc PhoneConnector )Connect(){
  fmt.Println("Connect:",pc.name)
}

func Disconnect(usb USB){
  fmt.Println("Disconnected")
}

func main(){

  a:=PhoneConnector{"PhoneConnector"}//PhoneConnector achieves the USB so we can let
//a=PhoneConnector
  a.Connect()
  Disconnect(a)

}

嵌入接口

package main

import "fmt"

type USB interface{
  Name() string
  Connector //Connect()
}

type Connector interface{
   Connect()
}

type PhoneConnector struct{
  name string
}

func (pc PhoneConnector )Name()string{
  return pc.name
}

func (pc PhoneConnector )Connect(){
  fmt.Println("Connect:",pc.name)
}

func Disconnect(usb USB){
  if pc,ok:=usb.(PhoneConnector);ok{
  fmt.Println("Disconnected",pc.name)
  return
 }
  fmt.Println("unknown device")
}

func main(){

  a:=PhoneConnector{"PhoneConnector"}//PhoneConnector achieves the USB so we can let
//a=PhoneConnector
  a.Connect()
  Disconnect(a)

}

上帝接口(任何类型都实现了该接口)

package main

import "fmt"

type empty interface{
}

type USB interface{
  Name() string
  Connector //Connect()
}

type Connector interface{
   Connect()
}

type PhoneConnector struct{
  name string
}

func (pc PhoneConnector )Name()string{
  return pc.name
}

func (pc PhoneConnector )Connect(){
  fmt.Println("Connect:",pc.name)
}

func Disconnect(usb empty){//you can give any type

 switch v:=usb.(type){
 case PhoneConnector:
      fmt.Println("Disconnected",v.name)
  default:

  fmt.Println("unknown device")
 }
}

func main(){

  a:=PhoneConnector{"PhoneConnector"}//PhoneConnector achieves the USB so we can let
//a=PhoneConnector
  a.Connect()
  Disconnect(a)

}

空接口允许传递任何类型
接口转换
以上述为例子:
Connector不能转换为USB但是USB可以转换为Connector

package main

import "fmt"

type empty interface{
}

type USB interface{
  Name() string
  Connector //Connect()
}

type Connector interface{
   Connect()
}

type PhoneConnector struct{
  name string
}

func (pc PhoneConnector )Name()string{
  return pc.name
}

func (pc PhoneConnector )Connect(){
  fmt.Println("Connect:",pc.name)
}

func Disconnect(usb empty){//you can give any type

 switch v:=usb.(type){
 case PhoneConnector:
      fmt.Println("Disconnected",v.name)
  default:

  fmt.Println("unknown device")
 }
}

func main(){
 pc:=PhoneConnector{"PhoneConnector"}
 var a Connector
 a=Connector(pc)//translate the PhoneConnector to Connector
 a.Connect() 
}

发布了212 篇原创文章 · 获赞 33 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/hello_bravo_/article/details/72861337