当前位置: 首页 > 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() 更面向对象,也更清晰语义。

http://www.xdnf.cn/news/513253.html

相关文章:

  • JVM如何处理多线程内存抢占问题
  • 【Java学习笔记】【第一阶段项目实践】房屋出租系统(面向对象版本)
  • 【Linux】第十九章 管理SELinux安全性
  • 数字格式化库 accounting.js的使用说明
  • “Cloud Native English“云原生时代下的微服务架构设计:从理论到实战全解析
  • 【数据结构】2-3-2 单链表的插入删除
  • 结构型模式:代理模式
  • 改进模糊C均值时序聚类+编码器状态识别!IPOA-FCM-Transformer组合模型
  • 牛客网NC276055:三根木棒能否组成三角形问题详解(ACM中的A题)
  • 【C++】尾置返回类型(Trailing Return Type)总结
  • 多模态大语言模型arxiv论文略读(八十)
  • vscode优化使用体验篇(快捷键)
  • React 19版本refs也支持清理函数了。
  • 【C++】set、map 容器的使用
  • Java 中 == 与 equals() 详解
  • 索引与数据结构、并行算法
  • LlamaIndex中应用自定义提示词提升回答质量
  • go语言协程调度器 GPM 模型
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus云服务的Dify 快速构建聊天助手
  • 目标检测新突破:用MSBlock打造更强YOLOv8
  • 如何使用WordPress创建美食博客
  • 跨平台多用户环境下PDF表单“序列号生成的服务器端方案“
  • 如何实现RTSP和RTMP低至100-200ms的延迟:直播SDK的技术突破
  • Metasploit框架与网络安全攻防技术解析
  • 标准库、HAl库和LL库(PC13初始化)
  • 【甲方安全建设】Python 项目静态扫描工具 Bandit 安装使用详细教程
  • 视差场(disparity field)
  • Linux之基础IO
  • MySQL 数据库备份与还原
  • iOS APP启动页及广告页的实现