学习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编译器优化了此项,所以我们直接可以调用。 加油哦,运维小学生。

posted @ 2022-04-28 14:58  pdudos  阅读(0)  评论(0编辑  收藏  举报  来源