结构体与方法——面向对象的Go式实现
Go 语言没有 class但它通过结构体struct 方法method 接口interface这套组合实现了一种非常务实、轻量级的面向对象风格。下面从最基础讲起一步步说明 Go 是如何“面向对象”的重点放在结构体与方法的部分。1. 结构体 ≈ 数据 状态类似 OOP 的“字段/属性”typePersonstruct{NamestringAgeintGenderstring// 小写开头 → 包外不可见封装}这是最基本的“对象数据载体”Go 不强制要求字段一定要小写private但习惯上用小写开头实现封装2. 方法 绑定到结构体的函数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}3.值接收者 vs 指针接收者 —— 这是 Go 最容易踩坑的地方特性值接收者(p Person)指针接收者(p *Person)推荐场景是否拷贝结构体是拷贝一份否只拷贝指针8字节—能否修改原对象不能改的是副本能需要修改状态时必须用指针方法调用方式值 / 指针 都可以调用只有指针能调用值调用会编译错—并发安全性天然安全操作副本需要自己加锁小结构体、无状态变化 → 值接收者性能大结构体拷贝开销大几乎无拷贝开销结构体 几十字节 → 优先考虑指针一致性原则官方建议——同一个类型的所有方法尽量统一用一种接收者官方经典建议Effective Go Go Tour“对一个类型的所有方法要么都用值接收者要么都用指针接收者不要混用。”最常见的现实选择规律2025–2026 社区共识小结构体 16–32 字节、不可变、纯计算 → 值接收者需要修改状态、包含 mutex、slice/map 等会增长的字段 → 指针接收者占主流约 70–80%混合类型例如 String() 方法常用值接收者其余用指针→ 可以接受但尽量避免4. 完整的“类”风格示例带构造函数 方法packagemainimportfmt// 类推荐首字母大写导出typeRectanglestruct{widthfloat64heightfloat64}// 构造函数Go 没有 new 关键字强制要求习惯用 NewXxxfuncNewRectangle(w,hfloat64)*Rectangle{ifw0||h0{panic(宽度和高度必须 0)}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(factorfloat64){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,5)fmt.Println(rect)// Rectangle{10.0 × 5.0}fmt.Printf(面积: %.2f\n,rect.Area())// 50.00rect.Scale(2)fmt.Println(rect)// Rectangle{20.0 × 10.0}fmt.Printf(周长: %.2f\n,rect.Perimeter())// 60.00}5. 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 选择场景是什么可以聊聊

相关新闻

大模型Agent的核心还是prompt?

大模型Agent的核心还是prompt?

不完全是,但 prompt(以及更广义的“上下文工程”)仍然是 LLM Agent 的核心基石之一,尤其在2026年初的实际工程实践中。 简单说:Agent 的“智能”本质上还是靠大模型的推理能力,而这个推理能力目前主要通过…

2026/7/5 15:00:40 阅读更多 →
【Qt实战】工业级多线程串口通信:从底层协议设计到完美收发闭环

【Qt实战】工业级多线程串口通信:从底层协议设计到完美收发闭环

文章目录【Qt实战】工业级多线程串口通信:从底层协议设计到完美收发闭环前言第一章:多线程的“户口”问题(Thread Affinity)1.1 核心概念:对象依附性1.2 经典错误:在构造函数里 new1.3 工业级解法&#xff…

2026/7/3 15:46:36 阅读更多 →
手把手教你学Simulink--控制执行场景实例:基于Simulink的智能车辆电子稳定控制(ESC)仿真

手把手教你学Simulink--控制执行场景实例:基于Simulink的智能车辆电子稳定控制(ESC)仿真

目录 手把手教你学Simulink 一、引言:为什么“智能汽车需要ESC”? 二、ESC 系统架构总览 输入(驾驶员 + 环境): 输出(控制指令): 三、关键原理:理想横摆角速度模型 四、车辆动力学模型(含轮胎非线性) 侧向力: 侧偏角: 运动方程: 五、ESC 控制器设计:…

2026/7/3 15:46:37 阅读更多 →

最新新闻

缠论终极自动化解决方案:5分钟在通达信上实现免费缠论分析插件

缠论终极自动化解决方案:5分钟在通达信上实现免费缠论分析插件

缠论终极自动化解决方案:5分钟在通达信上实现免费缠论分析插件 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 还在为复杂的缠论分析而烦恼吗?ChanlunX缠论插件为你提供了一套完整…

2026/7/6 1:57:44 阅读更多 →
RTVS 1.3.0 阿里云 CentOS 7.8 部署:5分钟完成 Docker 网络与端口映射配置

RTVS 1.3.0 阿里云 CentOS 7.8 部署:5分钟完成 Docker 网络与端口映射配置

RTVS 1.3.0 在阿里云CentOS 7.8上的高效部署指南:Docker网络与端口映射实战1. 环境准备与基础配置在阿里云CentOS 7.8上部署RTVS视频平台前,需要完成以下基础环境配置。选择CentOS 7.8是因为其长期支持周期和稳定的内核版本,能够完美兼容Dock…

2026/7/6 1:57:44 阅读更多 →
最小权限原则实战:从Linux进程到云原生的五层权限收缩

最小权限原则实战:从Linux进程到云原生的五层权限收缩

1. 项目概述:为什么“最小权限”不是一句空话,而是系统防线的第一道闸门“Principle of Least Privilege”——中文常译作“最小权限原则”,但这个词组在实际运维现场、安全审计会议或开发复盘会上,从来不是PPT里一个被轻描淡写划…

2026/7/6 1:55:42 阅读更多 →
5大核心技术揭秘:Topit如何实现macOS窗口置顶的魔法效果

5大核心技术揭秘:Topit如何实现macOS窗口置顶的魔法效果

5大核心技术揭秘:Topit如何实现macOS窗口置顶的魔法效果 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾遇到过这样的困扰:在编…

2026/7/6 1:53:42 阅读更多 →
华为RH2288H V3 Windows Server 2008安装:3个驱动安装难点与解决方案

华为RH2288H V3 Windows Server 2008安装:3个驱动安装难点与解决方案

华为RH2288H V3服务器Windows Server 2008驱动安装全攻略:从RAID卡到芯片组的实战解决方案 在数字化转型的浪潮中,企业级服务器作为IT基础设施的核心,其稳定性和性能直接关系到业务连续性。华为RH2288H V3作为一款经典的2U机架式服务器&…

2026/7/6 1:53:42 阅读更多 →
中小教培机构到底该怎么选管理系统?一个12年运营顾问掏心窝建议

中小教培机构到底该怎么选管理系统?一个12年运营顾问掏心窝建议

教培机构为什么总是管不好账、留不住人? 做了12年校区运营咨询,我见过太多中小机构死在"管理"两个字上。不是课上得不好,是排课冲突、续费提醒漏发、课时算不清、家长投诉没人接——这些琐碎的事,一点点把校长的精力吃…

2026/7/6 1:49:40 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻