发布时间:2026/7/17 16:58:36
golang结构体函数中值接收函数和指针接收函数的区别 1. 值接收者 vs 指针接收者这两种写法的核心区别是接收者类型不同一个是值接收者一个是指针接收者。// 值接收者接收的是 Focus 的一个副本func(Focus)aaa()string{returnfocus}// 指针接收者接收的是 Focus 实例的地址func(f*Focus)bbb()string{returnfocus}2. 调用方式对比// 值接收者可以用值或指针调用f:Focus{}f.aaa()// ✅ 可以(f).aaa()// ✅ 也可以// 指针接收者也可以用值或指针调用Go 会自动取地址f.bbb()// ✅ Go 自动转成 (f).bbb()(f).bbb()// ✅ 可以Go 编译器会自动帮你转换所以调用时看起来没区别。3. 本质区别对比点值接收者(Focus)指针接收者(f *Focus)是否拷贝数据✅ 会拷贝整个结构体❌ 不会拷贝直接操作原对象能否修改结构体字段❌ 不能改的是副本✅ 可以内存开销较大结构体大时较小只传地址是否实现接口看接口定义看接口定义4. 用例子看区别func(f Focus)SetTitleV(){f.Titlechanged// 改的是副本原对象不变}func(f*Focus)SetTitleP(){f.Titlechanged// 改的是原对象}调用后f:Focus{Title:old}f.SetTitleV()fmt.Println(f.Title)// 输出: oldf.SetTitleP()fmt.Println(f.Title)// 输出: changed5. 什么时候用哪种用指针接收者*Focus方法需要修改结构体字段结构体比较大避免拷贝开销一致性有些方法必须用指针那就全用指针用值接收者Focus结构体很小如简单配置方法不修改字段且你明确希望是只读操作总结一句话aaa()是值接收者操作的是副本bbb()是指针接收者操作的是原对象。但指针接收者更常见。

相关新闻

2026/7/17 16:58:36

微软DiskSpd存储性能测试工具:5分钟快速上手完整指南

微软DiskSpd存储性能测试工具:5分钟快速上手完整指南 【免费下载链接】diskspd DISKSPD is a storage load generator / performance test tool from the Windows/Windows Server and Cloud Server Infrastructure Engineering teams 项目地址: https://gitcode.c…

2026/7/17 16:58:36

HiMarket认证授权体系:JWT Token机制与角色权限控制详解

HiMarket认证授权体系:JWT Token机制与角色权限控制详解 【免费下载链接】himarket HiMarket is an enterprise-level "AI Capability Marketplace and Developer Ecosystem Hub." It is not merely a simple aggregation of traditional APIs, but rathe…

2026/7/17 16:58:36

大规模训练的数据流水线:预处理、分片、预取的三层并行

大规模训练的数据流水线:预处理、分片、预取的三层并行 一、个性化深度引言 训练一个 13B 参数的模型,数据集 2TB。最初的 Pipeline 是单机处理:读文件、Tokenize、Batching,数据加载占了 GPU 训练时间的 40%。A100 显卡每秒钟等着…

2026/7/17 18:13:52

全志V851se芯片Linux 6.1 + Debian 12镜像构建指南

1. 项目背景与目标在嵌入式开发领域,全志V851se芯片因其出色的性价比和丰富的外设接口备受开发者青睐。TinyVision作为基于该芯片的典型开发板,其官方提供的系统镜像往往无法满足开发者对最新内核和定制化系统的需求。手动构建Linux 6.1 Debian 12镜像的…

2026/7/17 18:13:52

基于GH6108指纹识别与树莓派的智能棋盘:硬件集成与AI部署实战

1. 项目概述:当传统棋盘遇上AI与生物识别最近在捣鼓一个挺有意思的玩意儿:把一块普通的棋盘,改造成能“认人”的智能设备。听起来有点科幻?其实核心思路很简单,就是给棋盘加上一个“眼睛”和一个“大脑”。“眼睛”负责…

2026/7/17 18:13:52

SpringBoot-Scan路线图:构建下一代SpringBoot应用安全扫描平台

1. 项目概述:SpringBoot-Scan是什么,以及我们为什么要规划它的未来如果你是一名Java开发者,尤其是深度使用SpringBoot框架的工程师,那么“安全”这个词,在你日常的编码、测试和部署中,一定是个绕不开的坎。…

2026/7/17 18:13:52

CANN/asc-devkit HCCL v1 TilingData接口

v1版本TilingData(废弃) 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求…

2026/7/17 18:08:51

Deemix WebUI详细教程:打造云端音乐下载管理平台

Deemix WebUI详细教程:打造云端音乐下载管理平台 【免费下载链接】deemix 项目地址: https://gitcode.com/gh_mirrors/de/deemix 想要打造一个属于自己的云端音乐下载管理平台吗?Deemix WebUI就是你的终极解决方案!🚀 这款…

2026/7/17 5:59:06

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/17 1:21:45

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/17 7:39:19

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/17 0:04:23

BiSheng JDK-build性能调优:构建速度提升30%的优化策略

BiSheng JDK-build性能调优:构建速度提升30%的优化策略 【免费下载链接】bishengjdk-build BiSheng JDK build and test scripts - common across all releases/versions 项目地址: https://gitcode.com/openeuler/bishengjdk-build 前往项目官网免费下载&am…

2026/7/17 14:59:44

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…