go语言仅支持封装,不支持继承和多态。
go语言没有class,只有struct。

结构的定义

Go语言的面向对象_多态

  • go 语言即使是指针,不像 C语言使用->也可一直使用.引用下去Go语言的面向对象_多态_02
  • go 没有构造器,但可使用工厂函数
    Go语言的面向对象_多态_03
    那么这到底创建在了堆还是栈呢?
    不需要知道。如果返回了没人用就在栈上
    如果返回了有人用,就在堆,并参与到 GC。
    所以没必要知道,编译器自己都知道。
参数前后区别
  • 参数定义在函数名前后有啥区别呢?
    Go语言的面向对象_值传递_04
  • 使用区别
    Go语言的面向对象_多态_05
    Go都是值传递,记住了,和 Java 一样。
使用指针作为方法接收者

Go语言的面向对象_多态_06

  • 只有使用指针才可以改变结构内容
  • nil 指针也可调用方法(Go 很特殊)
值接收者 V.S 指针接收者
  • 要改变内容必须使用指针接收者
  • 结构过大也考虑使用指针接收者
  • 一致性:如有指针接收者,最好都是指针接收者

值接收者才是go语言特有的!
值/指针接收者均可接收值/指针