学习golang(8) 初探:方法

简介: 学习golang(8) 初探:方法

什么是方法

方法,可以对应其他编程语言中的“面向对象”,虽然go没有面向对象,但是它所提供的,结构体、方法和接口,使用起来,也能帮助我们构建“面向对象”了。



方法和函数区别

方法可以称之为是一种特殊的函数,方法和函数相比,多了2个东西,其为

  • 方法有接受者
  • 方法属于特殊的类型




方法和函数举例


什么意思,我们来看下

例如: 我们想写一个程序,功能为:模拟用户购买物品,并且支付

我们来看下函数式编写如下

image.png

我们执行下

image.png


我们再来看下使用 方法 编写如下

image.png

我们执行下,也能拿到这个结果

image.png

如果你了解过“面向对象”,看上述的这个例子,是不是感觉有点“面对对象”那味了。




方法的声明


方法声明格式以及限制

通过上述的例子,我们可以看到,方法相比于我们之前使用的函数,只不过多了一个接受者而已,其格式如下

func (接受者) 方法名称(参数)(返回值) {
    ...
}


其中接受者,需要为我们自定义类型,例如结构体

若我们使用内置类型,例如int,则编译会报错

image.png


编译会报错

image.png


想想,也觉得合理,若常用变量都能使用方法了,那还得了。

若我们真的想使用常用变量作为方法类型,其实我们可以退而求其次,例如: type ss int这样我们就可使用方法了。



方法和函数无冲突


若方法名称,和函数名称在同一个包定义中相同了,是没有冲突的,函数声明其实是包级别的函数,而方法,则为该类型的方法,相当于命名空间了。

image.png


我们来运行下

image.png


可以看到,我们正常的拿到了结果

我们使用gdb工具调试一下

我们查看方法的栈信息

image.png

再来看看函数的栈信息

image.png

可以发现,一个是包级别的函数main.add,一个是类型ss的方法



接受者


和函数一样,接受者,也有形参和指针的说法,若我们使用形参接收者的话,我们在方法中修改了数据,是不会影响源数据的,而我们使用指针的话,是会影响的,除此之外,方法也可以赋值给变量,然后由变量来调用方法,我们来举例看下呢


编写程序: 定义个结构体,包含名称、以及一个bool类型,我们通过方法传入一个值,判断是否大于18,以此来更改此标记

image.png

我们来运行下

image.png



总结


go没有class等,但是我们可以通过方法来操作,方法的什么和函数和类似,增加了一个接受者而已,但是我们声明方法的类型,这个必须的是自定义类型,如int 等我们是不能直接使用的哦,我们得需要封装一下才行: type ss int , 而我们接受者也有2种类型,1. 形参 2. 指针 , 我们在调用的时候,原本是需要通过取地址符号& 来调用的,而go编译器优化了此项,所以我们直接可以调用。 加油哦,运维小学生。









相关文章
|
6月前
|
JSON 缓存 Go
Golang 语言 Web 框架 beego v2 之控制器方法和输入输出数据
Golang 语言 Web 框架 beego v2 之控制器方法和输入输出数据
51 0
|
6月前
|
缓存 机器人 Go
Golang 语言 beego 学习之安装和快速入门
Golang 语言 beego 学习之安装和快速入门
37 0
|
1月前
|
SQL 前端开发 Go
编程笔记 GOLANG基础 001 为什么要学习Go语言
编程笔记 GOLANG基础 001 为什么要学习Go语言
|
6月前
|
存储 Go API
100天精通Golang(基础入门篇)——第7天:深入学习键盘输入和打印输出,掌握常用函数和包
100天精通Golang(基础入门篇)——第7天:深入学习键盘输入和打印输出,掌握常用函数和包
40 0
|
3月前
|
Go Java C++
Golang每日一练(leetDay0031) 解码方法、复原 IP 地址
Golang每日一练(leetDay0031) 解码方法、复原 IP 地址
34 0
Golang每日一练(leetDay0031) 解码方法、复原 IP 地址
|
3月前
|
编译器 Go
浅谈Golang T和*T方法集的关系
浅谈Golang T和*T方法集的关系
22 0
|
6月前
|
Java Go C语言
100天精通Golang(基础入门篇)——第2天:学习Go语言的前世今生:一门强大的编程语言的崛起
100天精通Golang(基础入门篇)——第2天:学习Go语言的前世今生:一门强大的编程语言的崛起
128 1
|
6月前
|
Rust Java Go
100天精通Golang(基础入门篇)——第1天:学习Go语言基本概念
100天精通Golang(基础入门篇)——第1天:学习Go语言基本概念
82 0
|
6月前
|
编译器 Go 开发者
100天精通Golang(基础入门篇)——第0天:安装Go语言开发环境的基础教程,带你学习Golang之Hello Go!
100天精通Golang(基础入门篇)——第0天:安装Go语言开发环境的基础教程,带你学习Golang之Hello Go!
71 0
|
6月前
|
Cloud Native 程序员 Go
100天精通Golang(基础入门篇)——第19天:深入剖析Go语言中方法(Method)的妙用与实践
100天精通Golang(基础入门篇)——第19天:深入剖析Go语言中方法(Method)的妙用与实践
20 0