go-基础-结构体函数

package main

import "fmt"

// 结构体
// 对象
type rect struct {
	width, height int
}

// 作用于特定类型的函数,特定类型变量称为接收者(receiver).类比js中的this
/*
	func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {}
	建议:
	1. 接收者变量:接收者中的参数变量名在命名时,官方建议使用接收者类型名的第一个小写字母
	2. 接收者类型:接收者类型和参数类似,可以是指针类型和非指针类型
	3. 方法名、参数列表、返回参数:具体格式与函数定义相同
	区别函数:
	函数不属于任何类型,方法属于特定类型
*/
// 结构体函数
// 对象方法
// 1. 指针类型的接收者: 由一个结构体的指针组成
// 由于指针的特性,调用方法时修改接收者指针的任意成员变量,在方法结束后,修改都是有效的
// 2. 值类型的接收者: 当方法作用于值类型接收者时,Go语言会在代码运行时将接收者的值复制一份。
// 在值类型接收者的方法中可以获取接收者的成员值,但修改操作只是针对副本,无法修改接收者变量本身
/*
	什么时候使用指针接受者
	1.需要修改接收者中的值
  2.接收者是拷贝代价比较大的大对象
  3.保证一致性,如果有某个方法使用了指针接收者,那么其他的方法也应该使用指针接收者
*/
func (r *rect) area() int {
	return r.width * r.height
}
func (r rect) perim() int {
	return 2*r.width + 2*r.height
}

// 可以给任何类型定义方法,扩展方法。
// 非本地类型不能定义方法,也就是说我们不能给别的包的类型定义方法
func main() {
	r := rect{width: 10, height: 5}
	fmt.Println("area:", r.area())
	fmt.Println("area:", r.perim())
	rs := &r
	fmt.Println("area:", rs.area())
	fmt.Println("area:", rs.perim())

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值