当前位置: 首页 > news >正文

Go语言中函数 vs 方法

函数(Function):不属于任何类型,是全局可调用的。
方法(Method):绑定在某个类型上的函数,调用时依赖于这个类型的值或指针。

一、函数(Function)

func 函数名(参数列表) 返回类型 {// 函数体
}
func Add(a int, b int) int {return a + b
}
result := Add(3, 4) // => 7

✅ 这个函数是“独立”的,跟任何结构体或类型无关。

二、方法(Method)

func (变量名 类型名) 方法名(参数列表) 返回类型 {// 方法体
}
type Person struct {Name stringAge  int
}// 方法 SayHello 绑定在 Person 类型上
func (p Person) SayHello() string {return "Hello, " + p.Name
}
p := Person{Name: "Tom"}
fmt.Println(p.SayHello()) // 输出:Hello, Tom

三、指针接收者 vs 值接收者
Go 方法接收者可以是值也可以是指针,区别在于是否能修改原对象。
值接收者(不改变原值):

func (p Person) ChangeName(newName string) {p.Name = newName // 修改的是副本
}p := Person{Name: "Tom"}
p.ChangeName("Jerry")
fmt.Println(p.Name) // 还是 Tom

指针接收者(能修改原值):

func (p *Person) ChangeName(newName string) {p.Name = newName // 修改的是原对象
}
p := Person{Name: "Tom"}
p.ChangeName("Jerry")
fmt.Println(p.Name) // 是 Jerry
比较项函数(Function)方法(Method)
是否有接收者❌ 没有✅ 有((变量名 类型名)
是否绑定类型❌ 否✅ 是
是否能被结构体调用❌ 不能✅ 可以(结构体.方法())
用于封装对象逻辑🚫 不适合✅ 很适合,符合 OOP 风格
语法示例func DoSomething()func (p *Person) DoSomething()
package mainimport "fmt"type Circle struct {Radius float64
}// 普通函数
func Area(c Circle) float64 {return 3.14 * c.Radius * c.Radius
}// 方法(值接收者)
func (c Circle) Area() float64 {return 3.14 * c.Radius * c.Radius
}func main() {c := Circle{Radius: 5}// 调用函数fmt.Println(Area(c))  // 输出:78.5// 调用方法fmt.Println(c.Area()) // 输出:78.5
}

✅ 结果一样,但 c.Area() 更面向对象,也更清晰语义。

相关文章:

  • STM32项目实战:ADC采集
  • Gartner《如何将生成式人工智能(GenAI)集成到应用架构》学习心得
  • elementplus menu 设置 activeindex
  • 探索用户行为数据分析——从基础查询到高级分析 【GaussDB(for MySQL)】
  • DeepSeek本地部署全攻略:从零搭建到Web可视化及数据训练
  • Java程序员学AI(一)
  • Linux(2)——shell原理及Linux中的权限
  • GLPK(GNU线性规划工具包)中建模语言MathProg的使用
  • MySQL 数据库备份与还原
  • Python训练营打卡 Day29
  • tomcat查看状态页及调优信息
  • 【数据结构】1-3 算法的时间复杂度
  • 掘金欧洲宠物经济新蓝海:比利时天然宠粮市场爆发与跨境新机遇
  • OpenSearch入门:从文档示例到查询实战
  • Linux `touch` 命令深度解析与高阶应用指南
  • 【Linux】第十七章 归档和传输文件
  • 大学量化投资课程
  • 深度剖析:YOLOv8融入UNetv2 SDI模块的性能提升之旅
  • 出现 Uncaught ReferenceError: process is not defined 错误
  • 《算法导论(第4版)》阅读笔记:p83-p85
  • 苏丹港持续遭无人机袭击,外交部:呼吁各方保护民用设施和平民安全
  • 日月谭天 | 赖清德倒行逆施“三宗罪”,让岛内民众怒不可遏
  • 聘期三年已至:37岁香港青年叶家麟卸任三亚市旅游发展局局长
  • 人民日报大家谈:为基层减负,治在根子上减到点子上
  • AG600“鲲龙”批生产首架机完成生产试飞
  • 上海国际珠宝时尚功能区未来三年如何建设?六大行动将开展