GO的方法定义

方法定义
Golang 方法总是绑定对象实例,并隐式将实例作为第一实参 (receiver)。

• 只能为当前包内命名类型定义方法。
• 参数 receiver 可任意命名。如方法中未曾使用 ,可省略参数名。
• 参数 receiver 类型可以是 T 或 *T。基类型 T 不能是接口或指针。 (下面例子演示)
• 不支持方法重载,receiver 只是参数签名的组成部分。
• 可用实例 value 或 pointer 调用全部方法,编译器自动转换。(下面例子演示)
一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。

(以上这几点很重要,需要细品)

所有给定类型的方法属于该类型的方法集。

1.1.1. 方法定义:
func (recevier type) methodName(参数列表)(返回值列表){}

参数和返回值可以省略
package main
import(
	"fmt"
)

type Demo struct{
	age int
}

 //receiver 类型 为指针*T
func (d *Demo) add1 (n int) (r int){
	r = d.age + n
	d.age = r //此处对d.age的值进行更新
	fmt.Println("add1:", d.age)
	return
}

//receiver 类型 为指针T
func (d Demo) add2 (n int) (r int){
	r = d.age + n
	d.age = r //此处对d.age的值进行更新
	fmt.Println("add2:", d.age)
	return
}


func main() {
	var demo1 Demo //实例化一个 Demo 赋值给demo1
	var demo2 Demo //实例化一个 Demo 赋值给demo2
	
	

	fmt.Println("采用实例的value(值)调用方法")
	demo1.age = 10 //初始化demo1.age的值
	demo1.add1(5) //add1: 15
	fmt.Println(demo1.age) //15 因为add1() receiver 类型 为*T 所以demo1.age的值会被更新
	
	demo1.age = 10 //重新赋值
	demo1.add2(5) //add2: 15
	fmt.Println(demo1.age) //10 因为add1() receiver 类型 为T 所以demo1.age的值不会被更新

	demo2.age = 10 //初始化demo2.age的值
	p := &demo2 //获取demo2的指针赋值给 p
	fmt.Println("采用实例的pointer指针调用方法")
	p.add1(5) //15
	fmt.Println(p.age) //15
	fmt.Println(demo2.age) //15

	demo2.age = 10 //重新赋值
	p.add2(5) //15
	fmt.Println(p.age) //10
	fmt.Println(demo2.age) //10
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值