Golang 开发实战day13 - Reciver Functions

🏆个人专栏

🤺 leetcode

🧗 Leetcode Prime

🏇 Golang20天教程

🚴‍♂️ Java问题收集园地

🌴 成长感悟

欢迎大家观看,不执着于追求顶峰,只享受探索过程

Golang 开发实战day13 - 接收者函数

Golang 接收者函数是方法的另一种打开方式

在 Golang 中,方法是与结构体或接口相关联的一组函数。通常情况下,我们使用 func (receiver TypeName) methodName(parameters) 格式来定义方法,其中 receiver 是方法接收者,用于指定方法作用于哪种类型的数据。

接收者函数为我们提供了一种更灵活的定义方法的方式。它允许我们直接将方法定义在结构体或接口类型上,而无需使用 func 关键字。这使得代码更加简洁易读,也更加符合面向对象的编程理念。

1. 接收者函数的语法:

go 复制代码
func (receiver TypeName) methodName(parameters) {
    // 方法体
}

其中:

  • receiver 是方法接收者,用于指定方法作用于哪种类型的数据。
  • TypeName 是接收者类型的名称。
  • methodName 是方法名称。
  • parameters 是方法参数列表。
  • 方法体 是方法的具体实现代码。

2. 接收者函数的优点

  • 简洁易读: 接收者函数可以直接定义在结构体或接口类型上,代码更加简洁易读。
  • 符合面向对象的编程理念: 接收者函数更加符合面向对象的编程理念,方法直接与数据类型关联,提高了代码的可维护性。
  • 方法链式调用: 接收者函数支持方法链式调用,使代码更加优雅。

3. 示例

项目中创建两个go文件,main.go, bill.go

3.1 main.go

go 复制代码
func main() {

	mybill := newBill("哆啦A梦的账单")

	fmt.Println(mybill.format())
}

3.2 bill.go

go 复制代码
// 定义一个bill结构
type bill struct {
	name  string
	items map[string]float64
	tip   float64
}

// 定义一个账单方法
func newBill(name string) bill {
	b := bill{
		name:  name,
		items: map[string]float64{"铜锣烧": 10.99, "提拉米苏": 30.99},
		tip:   0,
	}

	return b
}

// 整理输出
func (b bill) format() string {
	fs := "账单明细: \n"
	var total float64 = 0

	// list items
	for k, v := range b.items {
		fs += fmt.Sprintf("%v ...$%v \n", k+":", v)
		total += v
	}

	// total
	fs += fmt.Sprintf("%v ...$%0.2f", "总金额:", total)

	return fs
}

3.3 输出

这回的输出有些不一样,直接在命令行中运行

4. 总结:

接收者函数是 Golang 中一种强大的工具,可以让我们更灵活地定义方法,提高代码的简洁性和可维护性。理解和掌握接收者函数的使用技巧,可以帮助你写出更加优雅、高效的 Golang 代码。

相关推荐
java知路几秒前
go 以太坊代币查余额
golang
姝孟23 分钟前
C++——类和对象
开发语言·c++
小白学大数据23 分钟前
Snapchat API 访问:Objective-C 实现示例
开发语言·macos·objective-c
gopher951124 分钟前
go语言基础入门(一)
开发语言·golang
masa01030 分钟前
JavaScript--JavaScript基础
开发语言·javascript
拓端研究室TRL33 分钟前
Python用TOPSIS熵权法重构粮食系统及期刊指标权重多属性决策MCDM研究|附数据代码...
开发语言·python·重构
一只特立独行的猪6112 小时前
Java面试——集合篇
java·开发语言·面试
吃面不喝汤662 小时前
Flask + Swagger 完整指南:从安装到配置和注释
后端·python·flask
大得3692 小时前
go注册中心Eureka,注册到线上和线下,都可以访问
开发语言·eureka·golang
讓丄帝愛伱2 小时前
spring boot启动报错:so that it conforms to the canonical names requirements
java·spring boot·后端