内容简介:-------------------- interface 接口-------------------- interface 接口 多态的应用-------------------- interface 空接口 (任务类型)
-------------------- interface 接口
// 定义:
type IHumaner interface {
SayHi() // 接口中只能是方法声明,没有实现,没有数据字段
}
// Student ...
type Student struct {
id int
name string
}
func (tmp *Student) SayHi() {
fmt.Println("Student[%s, %d] SayHi", tmp.name, tmp.id)
}
// Teacher ...
type Teacher struct {
addr string
group string
}
func (tmp *Teacher) SayHi() {
fmt.Println("Teacher[%s, %d] SayHi", tmp.addr, tmp.group)
}
// MyStr
type MyStr string
func (tmp *MyStr) SayHi() {
fmt.Println("MyStr[%s, %d] SayHi", *tmp)
}
func main() {
// 定义接口类型的变量
var i IHumaner
// 只是实现了此接口的方法的类型,那么这个类型的变量(接收者类型)就可以给i赋值
s := &Student{"loong", 666}
i = s
i.SayHi()
t := &Teacher{"cls", "ShenZhen"}
i = t
i.SayHi()
var str MyStr = "hello loong"
i = &str
i.SayHi()
// Print Result
// loong 666 ... cls ... hello loong
}
-------------------- interface 接口 多态的应用
// 多态的应用
func WhoSayHi(i IHumaner){
i.SayHi()
}
// 调用多态
s := &Student{"loong", 666}
t := &Teacher{"cls", "ShenZhen"}
var str MyStr = "hello loong"
WhoSayHi(s)
WhoSayHi(t)
WhoSayHi(&str)
// 创建一个切片
x := make([]IHumaner, 3)
x[0] = s
x[1] = t
x[2] = &str
for _, i := range x {
i.SayHi()
}
-------------------- interface 空接口 (任务类型)
func main() {
// 空接口是万能类型
type tmp interface{} = 1
// 字符串
tmp = "abc"
tmp = &v2
// .. 等等数据类型
// ***** 打印参数的内部实现就是采用的空接口
// ftm.Println(args ...interface{})
}
-------------------- 类型断言 (类型查询)
struct Student struct {
id int
name string
}
func main() {
i := make([]interface{}, 3)
i[0] = 1
i[1] = "hello go"
i[2] = Student{666, "loong"}
// 类型查询
for index, data := range i {
// 第一个返回值,第二个返回判断结果的真假
if value, ok := data.(int); ok == true {
}
// data.(string) data.(Student) 都可以作为判断
}
// 同理,data.(type) 也可以作用于判断类型 return int, string, ...
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 程序员有话说 | 平时的程序猿 VS 面试的程序员
- 程序员高薪盛宴背后:程序员正在消失?
- 大龄程序员的出路,程序员的人生
- 程序员被沦陷!国内程序员真的饱和了?
- 1024程序员节,祝程序员们节日快乐!
- 我是女程序员,不是程序媛
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。