函数和方法是 Go 中用于定义代码块的两种方式。函数作用域为全局或包私有,方法作用域为类型私有。函数没有接收器参数,而方法有接收器参数,可以访问类型成员。实战案例展示了不使用结构体的平均
函数和方法是 Go 中用于定义代码块的两种方式。函数作用域为全局或包私有,方法作用域为类型私有。函数没有接收器参数,而方法有接收器参数,可以访问类型成员。实战案例展示了不使用结构体的平均数计算函数,以及使用结构体的带权重平均数计算方法。
Go 中函数与方法的差异
简介
在 Go 语言中,函数和方法是两种定义代码块的方式。虽然有许多相似之处,但它们也有根本的区别。本文将深入探讨 Go 中函数和方法之间的差异,并提供实战案例。
函数
函数是独立于类型的代码块,它的作用是对输入执行一些操作并返回输出。函数使用 func
关键字定义,后面跟着函数名、参数列表和返回值类型。
示例:
func sum(a, b int) int {
return a + b
}
调用函数:
result := sum(10, 20)
方法
方法是附加到类型上的函数。它允许该类型的实例访问和操作该方法的实现。方法使用接收器参数定义,后面跟着方法名、参数列表和返回值类型。
示例:
type Person struct {
Name string
}
func (p Person) Greet() string {
return "Hello, " + p.Name + "!"
}
调用方法:
p := Person{"John"}
greeting := p.Greet()
差异
特性 | 函数 | 方法 |
---|---|---|
定义 | func | <receiver type> <method name> |
作用域 | 全局、包私有 | 类型私有 |
接收器参数 | 无 | 有 |
访问类型成员 | 不行 | 可以 |
实战案例
计算平均数
在不使用结构体的情况下,可以编写一个函数来计算浮点数数组的平均数:
func Avg(numbers []float64) float64 {
sum := 0.0
for _, num := range numbers {
sum += num
}
return sum / float64(len(numbers))
}
计算带权重的平均数
如果需要根据权重计算平均数,可以使用一个方法:
type WeightedAvg struct {
Numbers []float64
Weights []float64
}
func (w WeightedAvg) Avg() float64 {
weightedSum := 0.0
for i := range w.Numbers {
weightedSum += w.Numbers[i] * w.Weights[i]
}
totalWeight := 0.0
for _, w := range w.Weights {
totalWeight += w
}
return weightedSum / totalWeight
}
结论
函数和方法在 Go 语言中扮演着不同的角色。函数是独立于类型的代码块,用于执行一般性任务。方法是附加到类型上的函数,用于操作和访问该类型的实例。理解函数和方法之间的差异对于编写清晰、可维护的 Go 代码至关重要。
--结束END--
本文标题: golang 函数与方法的区别是?
本文链接: https://lsjlt.com/news/608844.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0