当前位置:网站首页>Go 结构体方法
Go 结构体方法
2022-06-26 12:37:00 【thlzjfefe】
#### Go 结构体方法
本来今天有些事情忙的不准备更新内容了,后来提前完成了, 所以还是要更新了;
毕竟坚持本就是一件不容易的事情!加油,相信不管是大家还是我,都有一些事情想要做,那就坚持吧,剩下的交给天意吧;
昨天到今天上午一直在处理微信个人账户支付的事情,***大概就是如果个人没有能力或者没有权限开通微信支付功能,
而又想用微信的支付功能,那可能需要一些特殊的处理, 支付宝的功能同上***;
如果大家对个人支付感兴趣的,可以找我哈^_^;
在这里给大家推荐一首歌
原唱: 赵方婧
---
##### 方法
在一些情况下定义方法: 如结构体的行为,需要用方法才能完成;
Go 中的方法是作用在指定的数据类型上的(和指定的数据类型绑定),因此***自定义类型都可以有方法,不仅仅是结构体***;
方法的声明与调用:
type A struct {
Name string
}
func (a A) say(){
fmt.Println(a.Name)
}
说明:
1. func(a A) say() {} 表示结构体A有一个方法,名称为say
2. (a A) 体现say 方法与A 类型绑定
案例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
说明:
1. say 方法与Person 类型绑定
2. say 方法只能通过Person 类型的变量来调用,不能直接调用,也不能使用其它类型的变量调用;
3. say 方法的调用方式与其它OOP 语言有很大不同,***没有静态方法***;
4. func (p Person) say(){} p 表示哪个Person 实例调用,这个p 就是它的副本,与函数传参相似;
5. p***称为接收者***,可以自定义,一般建议起一些可以直观体验类型的名字;
---
再来体验一下例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
说明: 上面的一个小例子里面综合了前面学习的知识,还有本节要学习的知识,学习完本节应该都能理解了; ##### 方法的调用与传参机制原理 方法的调用和传参机制和函数基本一样,不一样的地方是方法调用时,会将调用方法的变量当做实参也传递给方法; 如果接收者是值类型进行值拷贝,如果接收者是引用类型进行地址拷贝;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
方法的注意事项: 1. 结构体是值类型,在方法调用中遵守值类型的传递机制; 2. 如果需要修改结构体变量的值,类似上述例子,通过结构体指针的方式处理; 3. Go 中的方法作用在指定的数据类型的方法上(与指定的数据类型绑定); 4. 方法的控制范围的规则与函数一样,方法名首字母小写,只能在本包内访问,方法首字母大写,可以在本包和其它包访问; 5. 如果一个结构体实现了String() 方法,那么fmt.Println() 默认会调用String 方法进行输出; 6. 对于方法接收者是值类型时,可以直接用指针类型的变量调用,反过来同样可以; 7. 不管接收者是值类型还是引用类型都可以直接使用实例变量调用方法; 案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
--- 总结一下: 不管调用形式如何(调用者是值类型还是引用类型),真正决定是值拷贝还是地址拷贝的,要看方法的接收者是什么类型; 如: (p Person) 则进行的是值拷贝,(p *Person) 是地址拷贝; 今天这些内容,有点绕,暂时就这些吧,学习一种新的编程语言时需要将其它的编程风格摒弃掉,希望一起进步; 个人微信公众号上会发最新的内容,欢迎关注一同交流学习
边栏推荐
- PHP returns false when calling redis method decrby less than 0
- nvm安装教程
- 四类线性相位 FIR滤波器设计 —— MATLAB源码全集
- KVM 显卡透传 —— 筑梦之路
- EasyGBS如何解决对讲功能使用异常?
- 2022 edition of China's medical robot industry investment status investigation and prospect dynamic analysis report
- Stream流学习记录
- 关于NaN的一些总结
- Analysis report on dynamic research and investment planning suggestions of China's laser medical market in 2022
- 【网络是怎么连接的】第二章(下):一个网络包的接收
猜你喜欢

File remote synchronization and backup artifact Rsync

BigInt:处理大数字(任意长度的整数)

goto语句实现关机小程序

记一次phpcms9.6.3漏洞利用getshell到内网域控

Redis learning - 01 introduction, installation and configuration

国标GB28181协议EasyGBS视频平台TCP主动模式拉流异常情况修复

栈,后入先出

老司机总结的12条 SQL 优化方案(非常实用)

el-form-item 包含两个input, 校验这两个input
![[solved] data duplication or data loss after laravel paginate() paging](/img/68/7bf51bbf893a91bee24f5f7d4a369f.jpg)
[solved] data duplication or data loss after laravel paginate() paging
随机推荐
软件测试 - 概念篇
7-2 摘花生
不到40行代码手撸一个BlocProvider
无人机遥感在森林监测的部分应用研究案例总结
KVM 显卡透传 —— 筑梦之路
栈,后入先出
Installing MySQL under Linux (RPM package installation)
老司机总结的12条 SQL 优化方案(非常实用)
中科软外包一面
Sharing ideas for a quick switch to an underlying implementation
"Pinduoduo and short video speed version", how can I roast!
imagecopymerge
ES6模块
goto语句实现关机小程序
Analysis report on dynamic research and investment planning suggestions of China's laser medical market in 2022
计组实践实验9——使用CMStudio设计基于分段模型机微程序指令(2)
做自媒体视频的各种常用工具合集奉上
processsing 函数random
2022 edition of Beijing 5g industry investment planning and development prospect forecast analysis report
软件测试 - 基础篇