Go的继承

严格的说Go是没有继承的,Go是用组合来实现的继承。Go是一个为了开发而诞生的语言,这个和C一样,而不是为了理论研究而产生的语言。所以Go注重的是效率,而不是模式什么的理论。所以,Go它提供了一个非常值得称道的并发支持,但Go它不支持完全面向对象的。这并不意味着Go不支持面向对象,Go语言里面的OO系统做的很轻巧,学习降至最低成本。向对象让Go失去了一些OO的方便特性,可是更高的效率和多返回值多少弥补了这一点。

那些全然支持面向对象的语言一般都具有继承的功能,继承有很多好处,最简单了讲,就是能够少写代码。在Go里面并没有继承的关键字,可是能够使用Go中一种叫做”组合”的方法来实现继承。

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. // Engine struct ...
  6. type Engine struct {
  7. Run bool
  8. }
  9. // Start ...
  10. func (this *Engine) Start() {
  11. this.Run = true
  12. }
  13. // Stop ...
  14. func (this *Engine) Stop() {
  15. this.Run = false
  16. }
  17. // Car struct
  18. type Car struct {
  19. Engine
  20. }
  21. // main ...
  22. func main() {
  23. fmt.Println("Start Main func()")
  24. car := new(Car)
  25. car.Start()
  26. fmt.Println(`Run status:`, car.Run)
  27. car.Stop()
  28. fmt.Println(`Run status:`, car.Run)
  29. }

链接