Go(Golang)_06_方法

方法

方法(封装):只能由特定对象调用的函数

1)方法就是特殊的函数,其只能由其在定义时指定的数据类型对象调用;

2)子结构体会继承结构体的所有方法;

3)调用方法格式:对象.方法(参数)


方法定义的格式(类似函数):

func  (接收者  数据类型) 方法名(参数列表)(返回值列表) {
	程序段
}

1)不同数据类型接收者的方法名可重名(数据类型都拥有独立的namespace);

2)方法名可与函数名重名(编译器对方法进行隐式命名);

3)同一数据类型拥有的所有方法名具有唯一性;

4)方法名不可与结构体对象中的字段重名;



接收者:可调用对应方法的数据类型对象

1)不可为Go中的内置类型指定方法(指针和接口类型也不可);

2)接收者的数据类型可为自定义类型或指向自定义类型的指针;

3)可通过自定类型的对象或自定类型的指针对象调用对应方法;

//内置类型:数、布尔、字符串、数组、slice、map和函数(func);
//自定义类型:结构体(struct)、接口(interface)、命名类型(type);


如:定义结构体类型并定义属于该类型方法,且调用该方法

1)编写程序;
在这里插入图片描述
2)运行结果;
在这里插入图片描述



通过方法实现封装的流程:

1)将结构体和其字段名的首字母全部小写(保护数据);

2)结构体所在的包中提供一个工厂模式函数(功能:构造函数);

3)提供首字母大写的Set方法(功能:判断并赋值);

4)提供首字母大小的Get方法(功能:获取值);


指针接收者

指针接收者:指定接收者的数据类型时,使用该类型的指针形式

1)若定义时是指针接收者,则在调用时应也使用指针类型(即使不需要);

2)不论调用对象和接收者的类型,都可实现该类型的对象可调用方法;

3)特殊情况下指针接收者也可为nil(应在注释中显示标明);



(1)调用对象和接收者均为自定义类型或自定义类型的指针类型

1)编译器根据调用对象的数据类型匹配包含对应接收者的方法,并调用;

2)例:对象.方法


(2)调用对象为自定义类型,接收者为自定义类型的指针类型

1)编译器会隐式的在调用对象前添加取地址符“&”;

2)例:对象.方法(参数)----> &对象.方法(参数)


(3)调用对象为自定义类型的指针类型,接收者为自定义类型

1)编译器会隐式的在调用对象前添加解引用符“*”;

2)例:对象.方法(参数) ---->*对象.方法(参数)


如:定义字典类型的方法,并调用

1)编写程序;
在这里插入图片描述
2)运行结果;
在这里插入图片描述


方法继承

方法继承:子结构体会继承父结构体中所有的字段和方法

1)本质:编译器将父结构体的方法复制,并将其接收者改为子结构体类型;

2)参数类型为父结构体时,传入子结构体需显示指定其父结构体字段;


如:通过继续父结构体定义字段,并调用父结构体的方法

1)编写程序;
在这里插入图片描述
2)运行结果;
在这里插入图片描述


方法变量/表达式

方法变量(方法值):将方法当作数据类型定义变量

1)本质:代表指定结构体对象的方法

2)调用格式:方法变量(参数)


方法变量的定义格式:方法变量名 := 对象.方法


如:通过方法变量调用方法

1)编写程序;
在这里插入图片描述
2)运行结果;
在这里插入图片描述


方法表达式:将结构体对象作为参数传入

1)本质:通过传入的结构体对象调用与表达式绑定的方法

2)调用格式:方法表达式(结构体对象)


方法表达式的定义格式:方法表达式名 := 结构体.方法

1)结构体需明确指定其为自定义类型还是自定义类型的指针;

2)调用时根据结构体的类型,判断传入普通对象还是地址;


如:通过方法表达式调用方法

1)编写程序;
在这里插入图片描述
2)运行结果;
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值