Photo by Troy Chen on Unsplash

Go语言基础 — 面向对象

Golang basic — OOP

--

  • Go语言只支持封装,不支持继承和多态
  • 没有Class,只有Struct,也没有构造函数。

假设有一个结构体。

下面的类似构造函数,但是返回的是一个私有变量的地址给外面用,如果是其他语言,如何函数结束之后,私有变量也无法使用,导致程序报错。但是在go语言中下面这样写是没有问题的。同时,我们也不需要担心堆和栈的问题,这些垃圾回收机制都由go内部处理

栈区(stack) — 由编译器自动分配和释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆区(heap) — 一般由程序员分配和释放,若程序员不释放,程序结束时可能由OS回收,注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

为结构体定义方法

值接受者和指针接受者

  • 值接受者会拷贝一份给函数
  • 指针接受者会直接把指针地址里的值给函数
  • 值接受者是GO语言特有
  • 值/指针接受者均可接受值/指针

考虑

  • 结构过大也要考虑使用指针接受者
  • 所以只有使用指针才可以改变结构体内容!

nil指针也可以调用指针

封装

  • 名字一般使用CamelCase
  • 首字母大写:public
  • 首字母小写:private

  • 每个目录一个包
  • main包包含可执行的入口
  • 为结构定义的方法必须放在同一个包
  • 可以是不同文件

扩展

Go语言里没有继承如果要扩充类型可以:

  • 定义别名
  • 使用组合

别名

组合

--

--

Yunjie Ding
Yunjie Ding

Written by Yunjie Ding

Born in China, living in Tokyo, Opinion is my own.

No responses yet