「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。
0 环境
- 系统环境:win10
- 编辑器:vscode
- go版本:gol.17.3
- 参考文章:go语言中文文档
1 前言
go语言里的函数和方法很类似,但是有所区别,方法一定要是带有类型的接收者。
2 初试方法
方法的基本格式如下:
func (recevier type) methodName(参数列表)(返回值列表){}-->这里的参数和返回值是可以省略的。
下图:用type来定义一个新类型,可以理解为给uint类型添加一个别名(就是添加了一个马甲),为啥不是int的类型呢,因为针对人的身高,所以不可能定义为负数的。在看下面的方法,对照上面的格式:func关键字 中间是接收者(小括号里的),最后面的是方法名。最后调用,接收者变量.方法名(),我们把它类比java里的类,先初始化创建,然后调用方法名。
我的类比:只是为了方便记忆。
3 指针类型接收者
上面讲的是值类型接收者,不仅可以用它,也还可以用指针类型。只针对指针修改(针对性极强),其他方式修改无效。
第一个UToString() --> 300,调用Change()后的UToString() --> 22。
接收者无星是值类型,不管你正常赋值还是加&xx,内部执行还是值副本,接收者有星是指针类型,也是同理,我们定睛在接收者的类型上面即可,因为Go语言编译器会自动帮我们转义了。假设把接收者当成只懂中文的人,而我说的是外语,想与他对话怎么办,我们的翻译器出马了,把我说的话翻译成中文,再传给接收者。
4 总结
方法与函数类似,区别在于:方法多个接收者,接收者是值类型,哪怕你是传指针了,编译器也会帮你处理成值类型副本,反之指针类型一样。接收者类型需要区分的:值类型是复制副本,指针类型是指针直接指向原值,进行修改。