作者:丹愿人常久6688 | 来源:互联网 | 2024-11-30 14:07
初探Go语言,对于接口的应用存在一些疑问。似乎通过直接定义方法就能完成的功能,为何还要引入接口?这不仅增加了代码量,看起来也更为复杂。例如下面这段代码:
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package main
import "fmt"
type Person struct { name string age int }
type Hero struct { Person specialSkill string }
type Actionable interface { run() fly() }
func (p Person) run() { fmt.Printf("%s is running... ", p.name) }
func (h Hero) fly() { fmt.Printf("%s is flying with %s... ", h.name, h.specialSkill) }
func main() { hero := Hero{ Person: Person{ name: "Yase", age: 20, }, specialSkill: "super strength", }
// 直接调用方法,看起来更加直接 hero.run()
// 使用接口 var action Actionable
// 疑问点:接口是否多余?这里通过接口来调用方法,似乎只是确保了对象实现了所有接口方法,如run和fly。这是使用接口的唯一原因吗? action = hero action.run() //action.fly() } |
核心问题:
直接通过对象调用方法已经能够满足需求,那么引入接口是否显得多余?接口的存在除了作为方法实现的约束外,还有什么其他意义或优势?