学习golang(8) 初探:方法
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情。
什么是方法
方法,可以对应其他编程语言中的“面向对象”,虽然go
没有面向对象,但是它所提供的,结构体、方法和接口,使用起来,也能帮助我们构建“面向对象”了。
方法和函数区别
方法可以称之为是一种特殊的函数,方法和函数相比,多了2个东西,其为
- 方法有接受者
- 方法属于特殊的类型
方法和函数举例
什么意思,我们来看下
例如: 我们想写一个程序,功能为:模拟用户购买物品,并且支付
我们来看下函数式编写如下
我们执行下
我们再来看下使用 方法 编写如下
我们执行下,也能拿到这个结果
如果你了解过“面向对象”,看上述的这个例子,是不是感觉有点“面对对象”那味了。
方法的声明
方法声明格式以及限制
通过上述的例子,我们可以看到,方法相比于我们之前使用的函数,只不过多了一个接受者而已,其格式如下
func (接受者) 方法名称(参数)(返回值) {
...
}
其中接受者,需要为我们自定义类型,例如结构体
若我们使用内置类型,例如int
,则编译会报错
编译会报错
想想,也觉得合理,若常用变量都能使用方法了,那还得了。
若我们真的想使用常用变量作为方法类型,其实我们可以退而求其次,例如: type ss int
这样我们就可使用方法了。
方法和函数无冲突
若方法名称,和函数名称在同一个包定义中相同了,是没有冲突的,函数声明其实是包级别的函数,而方法,则为该类型的方法,相当于命名空间了。
我们来运行下
可以看到,我们正常的拿到了结果
我们使用gdb
工具调试一下
我们查看方法的栈信息
再来看看函数的栈信息
可以发现,一个是包级别的函数main.add
,一个是类型ss
的方法
接受者
和函数一样,接受者,也有形参和指针的说法,若我们使用形参接收者的话,我们在方法中修改了数据,是不会影响源数据的,而我们使用指针的话,是会影响的,除此之外,方法也可以赋值给变量,然后由变量来调用方法,我们来举例看下呢
编写程序: 定义个结构体,包含名称、以及一个bool类型,我们通过方法传入一个值,判断是否大于18,以此来更改此标记
我们来运行下
总结
在go
没有class
等,但是我们可以通过方法来操作,方法的什么和函数和类似,增加了一个接受者而已,但是我们声明方法的类型,这个必须的是自定义类型,如int
等我们是不能直接使用的哦,我们得需要封装一下才行: type ss int
, 而我们接受者也有2种类型,1. 形参 2. 指针 , 我们在调用的时候,原本是需要通过取地址符号&
来调用的,而go
编译器优化了此项,所以我们直接可以调用。
加油哦,运维小学生。