• Go之接口


    package main
    import "fmt"
    type dog struct{}
    func (d dog)say(){
    	fmt.Println("汪汪汪")
    }
    type cat struct{}
    // 值接收者实现接口
    func (d cat)say(){
    	fmt.Println("喵喵喵")
    }
    
    type person struct{}
    // 指针接收者实现接口
    func (p *person)say(){
    	fmt.Println("啊啊啊")
    }
    // 接口不管你是什么类型,它只管你要实现什么方法
    // 定义一个抽象的类型。只要实现了say()的类型都可以成为sayer
    type sayer interface{
    	say()
    }
    // 打的函数
    func da(arg sayer){
    	arg.say()
    }
    func main(){
    	// 在go语言中,接口是一种类型,是一种抽象的类型
    	// 接口做的事情就像是定义一个协议(规则)
    	// 只要一台辑器有洗衣服和帅干的功能
    	// 我们就称它为洗衣机。不关心属性(数据),只关心行为(方法)
    	//  一个对象只要全部实现了接口中的方法,那么就实现了该接口
    	c1 := cat{}
    	da(c1)
    	d1 := dog{}
    	da(d1)
    
    	// 使用值类型接收者实现接口
    	// 类型的值和类型的指针都能够保存到接口
    	var s sayer
    	c2 := cat{}
    	s = &c2
    	s = c2
    	fmt.Println(s)
    
    	// 使用指针接收者实现接口。
    	// 只有指针类型能够保存到接口变量中
    	p1 := &person{}
    	s = p1
    	fmt.Println(s)
    
    	// 空接口
    	// 空接口是指没有定义任何方法的接口
    	// 因此任何类型都实现了空接口
    	// 空接口的类型可以存储任意类型的变量
    	var x interface{}
    	x = 100
    	x = true
    	x = "你猜我是谁"
    	fmt.Println(x)
    	// 类型断言
    	_, ok := x.(string)
    	
    	fmt.Println(ok) // 如果x是string类型,ok是true,否则是flase
    
    	// 使用空接口作为函数的参数
    	myPrintln("ddd")	
    	// 空接口作为map的value
    	var m = make(map[string]interface{})
    	m["name"] = "娜扎"
    	m["age"] = 18
    	myPrintln(m)
    }
    
    
    func  myPrintln(age interface{}){
    	fmt.Println(age)
    }
    
  • 相关阅读:
    UICollectionView 布局
    ios 调用支付宝
    iOS POST 上传图片
    ios 判断字符串是否为空
    让写代码成为每天的习惯
    gocron_跨平台定时任务管理器
    monkey做安卓APP的黑盒自动化测试
    Android自动化测试框架分析
    联合查询中where 和and的区别
    JIRA中导出BUG列表是CSV格式的,打开后是乱码
  • 原文地址:https://www.cnblogs.com/cl94/p/13835740.html
Copyright © 2020-2023  润新知