《Go程序设计语言》- 第6章:方法

前言

本专栏是笔者在学习《Go程序设计语言》这本书时,对每个章节认为较为重要容易忘记👻)的知识点记录的笔记,其中也会有少量的思考👀, 现整理成博客分享出来。

如果对专栏感兴趣,跑过去看一眼,书中的每一章都有:《Go程序设计语言》笔记

❗️注意❗️:本专栏不是详细的知识讲解,只是碎片的知识条目,或可作为Go知识点查漏补缺的小工具~

方法声明

  1. 在函数名之前多一个参数,参数把方法绑定到该参数的类型上:func (p Point)Distance(p1 Point){}
  2. 附加的参数p称为接收者
  3. 非结构体类型也能定义方法,如为type Path []Point定义方法:func (p Path) Print(){}
  4. 可以为简单类型(数字、字符串、slicemap、甚至函数等)定义附加的行为;但实际上func (p int)TestInt(){}会包编译错误:invalid receiver int (basic or unnamed type)
  5. 但如果type MyInt int,可以为MyInt添加方法;
  6. 同一个包下的任何类型都可以声明方法,只要它的类型不是指针或接口

指针接收者的方法

  1. 如声明func (p *Point)Test(){}后,方法名称是(*Point).Test,圆括号是必须的,否则将被解析为*(Point.Test)
  2. 不允许为本身是指针的类型进行方法声明;
  3. 定义*Point的方法,也可用变量p去使用该方法,编译器进行隐式&p转换,但只有变量才可以转换,临时变量不行;
  4. 接收者是p而变量使用的&p也会隐式地解引用接收者;
  5. nil是一个合法的接收者;

通过结构体内嵌组成类型

  1. 结构体中的匿名字段,结构体对象可以直接访问匿名对象中的字段,也可以直接访问匿名字段的方法;编译器会自动补充生成结构体的对应方法;
  2. 但是这不能理解为匿名字段是一个基类,因为结构体对象之间无法调用匿名字段的方法;

方法变量与表达式

  1. 可以将某个对象的方法设置为变量,则该变量是一个绑定到某个对象的方法

示例:位向量

  1. 集合通常使用map[T]bool来实现;

封装

  1. Go语言中封装需要通过结构体来实现,字段和方法都通过首字母大小写来判断可导出性
  2. 但封装的单元是,因为无论是否可导出,包内都是可见的;

如有错误 ❌ ,欢迎指正 ☝️~

如有收获 🍗,可以考虑点赞👍/评论💬/收藏⭐️/关注👀,大家共同进步~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值