Go语言浅尝之方法

Hello,各位小伙伴你们好,我是小栈君,由于疫情的缘故,因此今年过了一个非同寻常的年,在这里小栈君也是衷心的但愿你们清洗手,多通风,出门记得戴口罩,人多别去凑热闹。golang

安全卫生从你我作起,最重要的是即便呆在家里办公也别忘了学习哦~编程

file

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

概念

在golang中的方法是做用在特定类型的变量上,所以自定义类型都是能够有方法的,不单单只有一个struct 结构体。安全

方法和函数的区别

可是这里方法和咱们以前介绍的函数有什么区别呢?函数

大体小栈君为你们讲解一下,在函数中并无对象的概念,所以咱们对面向对象的函数叫作方法,可是他们本质上都是function,只是函数并不属于任何一个对象,所以只要符合条件的参数都是能够调用函数。学习

可是并不适用于方法。由于方法仅限于某一个对象,在后面小栈君会给你们进行实例举例说明。spa

格式

针对于Go语言中的方法的格式以下:
func (receive type) methodName(args ) (返回参数){}3d

file

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

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

file

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

file

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

一样的是方法也是遵循大小写的区别,小写的做用域只限于当前的文件中,对于其余外部须要调用的方法咱们统一会进行首字母大写处理。这也算是Go语言的一个规范,小栈君也是屡次说过这个问题,但愿小伙伴注意一下这个问题。

继承

一样相似于结构体中的继承,方法也是一样能够继承的,就如上图所示,咱们的SmallCar继承了Car的相关属性,一样SmallCar也一样拥有Car所特有的方法。

file

组合和匿名字段

若是一个struct嵌套了另外一个匿名结构体,那么这个结构体能够直接访问匿名结构体的方法从而实现继承,若是一个结构体嵌套了多个匿名结构体。

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

若是发现问题这会致使代码的排查复杂性和代码的可读性变差。

好了,今天的分享就到这里,咱们下期再见,若是你喜欢个人分享,能够进行转发,点赞或是分享给身边的朋友。武汉加油,中国加油~ 我是小栈君,咱们下期再见,拜了个拜。

相关文章
相关标签/搜索