《小马拉大车》:当渺小遇上宏大,一场关于勇气与梦想的奇遇

核心内容摘要

张柏芝吃木耳吃出“少女肌”?揭秘风靡娱乐圈的养颜秘密!
9.玫瑰:触动心弦的秘密,不止浪漫的色彩

铜铜钢铿锵:高清视听盛宴,免费共享精彩

Go 语言没有 class但它通过结构体struct 方法method 接口interface这套组合实现了一种非常务实、轻量级的面向对象风格。

下面从最基础讲起一步步说明 Go 是如何“面向对象”的重点放在结构体与方法的部分。

结构体 ≈ 数据 状态类似 OOP 的“字段/属性”typePersonstruct{NamestringAgeintGenderstring// 小写开头 → 包外不可见封装}这是最基本的“对象数据载体”Go 不强制要求字段一定要小写private但习惯上用小写开头实现封装

方法 绑定到结构体的函数ReceiverGo 的方法写法非常独特函数名前加一个“接收者”参数。

// 值接收者最常见拷贝一份数据func(p Person)Greet()string{return你好我是 p.Name}// 指针接收者能修改原对象func(p*Person)Birthday(){p.Age// 真正修改了调用者的 Age}使用方式funcmain(){alice:Person{Name:Alice,Age:25}// 值接收者两种写法都行Go 会自动解引用fmt.Println(alice.Greet())// 你好我是 Alicefmt.Println((alice).Greet())// 也行// 指针接收者通常需要 取地址alice.Birthday()// Age 变成 26(alice).Birthday()// 也行fmt.Println(alice.Age)// 27}

值接收者 vs 指针接收者 —— 这是 Go 最容易踩坑的地方特性值接收者(p Person)指针接收者(p *Person)推荐场景是否拷贝结构体是拷贝一份否只拷贝指针8字节—能否修改原对象不能改的是副本能需要修改状态时必须用指针方法调用方式值 / 指针 都可以调用只有指针能调用值调用会编译错—并发安全性天然安全操作副本需要自己加锁小结构体、无状态变化 → 值接收者性能大结构体拷贝开销大几乎无拷贝开销结构体 几十字节 → 优先考虑指针一致性原则官方建议——同一个类型的所有方法尽量统一用一种接收者官方经典建议Effective Go Go Tour“对一个类型的所有方法要么都用值接收者要么都用指针接收者不要混用。

”最常见的现实选择规律2025–2026 社区共识小结构体 16–32 字节、不可变、纯计算 → 值接收者需要修改状态、包含 mutex、slice/map 等会增长的字段 → 指针接收者占主流约 70–80%混合类型例如 String() 方法常用值接收者其余用指针→ 可以接受但尽量避免

完整的“类”风格示例带构造函数 方法packagemainimportfmt// 类推荐首字母大写导出typeRectanglestruct{widthfloat64heightfloat64}// 构造函数Go 没有 new 关键字强制要求习惯用 NewXxxfuncNewRectangle(w,hfloat

*Rectangle{ifw0||h0{panic(宽度和高度必须

}returnRectangle{width:w,height:h}}// 值接收者方法只读func(r Rectangle)Area()float64{returnr.width*r.height}func(r Rectangle)Perimeter()float64{return2*(r.widthr.height)}// 指针接收者方法修改状态func(r*Rectangle)Scale(factorfloat

{r.width*factor r.height*factor}// 实现 Stringer 接口类似 toStringfunc(r Rectangle)String()string{returnfmt.Sprintf(Rectangle{%.1f × %.1f},r.width,r.height)}funcmain(){rect:NewRectangle(10,

fmt.Println(rect)// Rectangle{

1

0 ×

0}fmt.Printf(面积: %.2f\n,rect.Area())//

5

00rect.Scale(

fmt.Println(rect)// Rectangle{

2

0 ×

1

0}fmt.Printf(周长: %.2f\n,rect.Perimeter())//

6

00}

Go 的 OOP 与传统语言对比快速记忆表特性Java/C#/CGoGo 的实现方式类classstruct—构造器constructor普通函数NewXxx习惯约定方法member functionreceiver function(t T) 或 (t *T)继承extends不支持改用嵌入匿名嵌入结构体多态override接口duck typing隐式实现接口封装private/protected小写字段/方法包级可见性this/selfthis / self接收者名字习惯用 p、r、this随便起名

总结一句话Go 的“面向对象”本质是用 struct 存数据用方法带 receiver绑行为用接口做多态用嵌入做组合/“伪继承”。

它故意去掉了传统 OOP 最复杂、最容易滥用的部分类继承、protected、super、构造器链、final 等换来的是更简单、可预测、高性能的代码。

你现在是用值接收者多一些还是指针接收者占主流或者你在项目里遇到过最纠结的 receiver 选择场景是什么可以聊聊

yy漫画下拉式漫画官网免费观看-yy漫画下拉式漫画官网免费观看应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123