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









相关文章
|
JSON 缓存 Go
Golang 语言 Web 框架 beego v2 之控制器方法和输入输出数据
Golang 语言 Web 框架 beego v2 之控制器方法和输入输出数据
122 0
|
缓存 机器人 Go
Golang 语言 beego 学习之安装和快速入门
Golang 语言 beego 学习之安装和快速入门
80 0
|
8月前
|
SQL 前端开发 Go
编程笔记 GOLANG基础 001 为什么要学习Go语言
编程笔记 GOLANG基础 001 为什么要学习Go语言
|
4月前
|
Go
Golang的math包常用方法
这篇文章介绍了Golang的math包中的常量和常用方法,并通过示例代码展示了如何使用这些常量和方法。
187 87
Golang的math包常用方法
|
3月前
|
安全 Java Go
【Golang入门】简介与基本语法学习
Golang语言入门教程,介绍了Go语言的简介、基本语法、程序结构、变量和常量、控制结构、函数、并发编程、接口和类型、导入包、作用域以及错误处理等关键概念,为初学者提供了一个全面的学习起点。
63 0
|
5月前
|
机器学习/深度学习 存储 人工智能
Golang bytes 包学习
Golang bytes 包学习
36 3
|
5月前
|
Kubernetes Go API
构建 Golang 应用程序的实用方法
构建 Golang 应用程序的实用方法
|
6月前
|
编译器 Go C语言
通过例子学习在golang中调试程序
【7月更文挑战第4天】Go语言支持使用cgo进行汇编调试,官方文档在golang.org/doc/asm。注意,调试Go运行时可能遇到变量不可用或行号错误,需谨慎使用step命令。
81 1
通过例子学习在golang中调试程序
|
8月前
|
Go
golang学习参考记录
golang学习参考记录
|
8月前
|
JSON Go 数据格式
golang学习7,glang的web的restful接口结构体传参
golang学习7,glang的web的restful接口结构体传参