首页 > 数据库 > Go语言浅尝之方法
2020
02-11

Go语言浅尝之方法

今天我们继续go语言系列分享之方法,对于方法的介绍,相信做过编程的小伙伴或多或少都有了解。
 
概念

在golang中的方法是作用在特定类型的变量上,因此自定义类型都是可以有方法的,不仅仅只有一个struct 结构体。

方法和函数的区别


但是这里方法和我们之前介绍的函数有什么区别呢?


大致小栈君为大家讲解一下,在函数中并没有对象的概念,因此我们对面向对象的函数叫做方法,但是他们本质上都是function,只是函数并不属于任何一个对象,因此只要符合条件的参数都是可以调用函数。


但是并不适用于方法。因为方法仅限于某一个对象,在后面小栈君会给大家进行实例举例说明。
 
格式
 
针对于Go语言中的方法的格式如下:
func (receive  type) methodName(args ) (返回参数){}


就拿我们之前讲过的一个例子而言,我们定义的一个car 和一个smallCar 结构体,其中SmallCar继承了Car的属性,理所应当的也继承了相应的方法。


但是小伙伴请注意,我们在定义方法的时候限定了Car,也就是说这一个Run方法除了Car和继承Car的子类,其他对象是无法使用的。如果强行使用编译器会直接报错,具体例子如图所示:



特别注意的一点是,在Go语言中依旧要区分值传递和引用传递,如下图所示:
 


也就是说在方法中也是区分了这个差别,如果稍微不注意,对于新手的小伙伴来讲很有可能会导致排查半天的问题而不得解。


同样的是方法也是遵循大小写的区别,小写的作用域只限于当前的文件中,对于其他外部需要调用的方法我们统一会进行首字母大写处理。这也算是Go语言的一个规范,小栈君也是多次说过这个问题,希望小伙伴注意一下这个问题。
 
继承


同样类似于结构体中的继承,方法也是同样可以继承的,就如上图所示,我们的SmallCar继承了Car的相关属性,同样SmallCar也同样拥有Car所特有的方法。
 

组合和匿名字段


如果一个struct嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的方法从而实现继承,如果一个结构体嵌套了多个匿名结构体。

那么这个结构体可以直接访问多个匿名结构体的方法,从而实现多重继承,当然在真实的项目当中并不推荐多重继承。


如果发现问题这会导致代码的排查复杂性和代码的可读性变差。

扫码芷若 获取免费视频学习资料

编程学习

查 看2019高级编程视频教程免费获取