在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在Java中,一切皆Object,在GO,一切皆type。 package main import "fmt" //定义一个接口,用于自我介绍 type introduce interface { say(name string, age int) } //定义introduceFunc类型,所有形参依次为string 、int 且返回为空的的函数都为introduceFunc类型 type introduceFunc func(name string, age int) //introduceFunc类型实现接口introduce func (f introduceFunc) say(name string, age int) { f(name, age) } //函数chineseSay,用中文自我介绍,形参依次为string 、int 且返回为空,所以,是introduceFunc类型 func chineseSay(name string, age int) { fmt.Printf("大家好,我叫%s,今年%d岁\n", name, age) } //函数chineseSay,用英文自我介绍,形参依次为string 、int 且返回为空,所以,是introduceFunc类型 func englishSay(name string, age int) { fmt.Printf("hi everyone,My name is %s,and I'm %d years old\n", name, age) } //遍历学生集合,每个学生自我介绍,具体自我介绍方式(用中文还是英文)取决于实参类型 func each(m map[string]int, h introduce) { if m != nil && len(m) > 0 { for name, age := range m { h.say(name, age) } } } func main() { students := map[string]int{"hu": 12, "lee": 33, "jim": 31} var handler introduceFunc = chineseSay each(students, handler) handler = englishSay each(students,handler) //以下编译错误,因为未将函数转换为对应类型 //each(students,chineseSay) } 输出如下: 大家好,我叫lee,今年33岁
上例假如不使用函数式接口,就得定义2个struct:EnglishSay,ChineseSay。然后定义method:say,也就是实现接口introduce。使用前创建struct实例。代码如下: package main
import "fmt"
//定义一个自我介绍的接口
type introduce2 interface {
say(name string, age int)
}
type ChineseSay struct {
}
func (ChineseSay) say(name string, age int) {
fmt.Printf("大家好,我叫%s,今年%d岁\n", name, age)
}
type EngliseSay struct {
}
func (EngliseSay) say(name string, age int) {
fmt.Printf("hi everyone,My name is %s,and I'm %d years old\n", name, age)
}
//遍历学生集合,每个学生自我介绍,具体自我介绍方式(用中文还是英文)取决于实参类型
func each2(m map[string]int, h introduce2) {
if m != nil && len(m) > 0 {
for name, age := range m {
h.say(name, age)
}
}
}
func main() {
students := map[string]int{"hu": 12, "lee": 33, "jim": 31}
each2(students,ChineseSay{})
each2(students,EngliseSay{})
}
输出结果如下: 大家好,我叫jim,今年31岁 |
请发表评论