Go语言的面向对象
Go语言只支持封装,不支持继承和多态
没有Class,只有Struct,也没有构造函数。
假设有一个结构体。
下面的类似构造函数,但是返回的是一个私有变量的地址给外面用,如果是其他语言,如何函数结束之后,私有变量也无法使用,导致程序报错。但是在go语言中下面这样写是没有问题的。同时,我们也不需要担心堆和栈的问题,这些垃圾回收机制都由go内部处理。
栈区(stack)--由编译器自动分配和释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap)--一般由程序员分配和释放,若程序员不释放,程序结束时可能由OS回收,注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
为结构体定义方法
值接受者和指针接受者
值接受者会拷贝一份给函数
指针接受者会直接把指针地址里的值给函数
值接受者是GO语言特有
值/指针接受者均可接受值/指针
考虑
结构过大也要考虑使用指针接受者
所以只有使用指针才可以改变结构体内容!
nil指针也可以调用指针
封装
名字一般使用CamelCase
首字母大写:public
首字母小写:private
包
每个目录一个包
main包包含可执行的入口
为结构定义的方法必须放在同一个包
可以是不同文件
扩展
Go语言里没有继承
如果要扩充类型可以:
定义别名
使用组合
别名
组合
Last updated