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

Go赋值操作的关键细节

一、:短变量声明的细节1.作用域规则2.重复声明规则3类型推断二、 赋值操作的细节1.类型必须匹配2.多重赋值特性三、 零值初始化细节1.Go为所有类型提供零值四、指针赋值的细节1.基本指针操作理解这段代码的关键在于搞清楚两个概念普通变量、指针变量以及它们之间的关系。用“门牌号”和“房子”来理解变量x就像是一栋房子里面住着数字10。指针变量p就像是一张纸条上面写着这栋房子的门牌号内存地址。现在看代码的每一步var x int 10var p *int x1.建房子x盖好了里面放了10。2.写纸条p是张空白纸条x就是去查x的门牌号然后把门牌号写到p的纸条上。*p 203.改房子里的东西*p这个动作叫解引用。意思是拿起p这张纸条顺着上面的门牌号找到x这栋房子然后把里面的东西换成20。注意纸条没变还是那个门牌号但房子里的东西变了。fmt.Println(x) // 输出 204.结果x这栋房子里的内容已经是20了。因为p和x指向的是同一栋房子所以通过p改x自己也会变。为什么var q *int危险var q *int// *q 30 // ❌ 这里会崩溃q是一张空白纸条nil指针。纸上没有写任何门牌号。如果执行*q 30就相当于“拿着一张空白纸条去找房子强行往里面塞东西。”你根本不知道那个房子在哪儿内存地址无效操作系统为了保护其他程序的安全会直接终止程序Panic。2.结构体指针五、特殊赋值情况1.空白标识符 _2.常量赋值六、复合类型的赋值细节1.切片赋值2.映射赋值七、 函数相关的赋值细节1.命名返回值一旦起了名字这两个变量在函数一开始就被自动创建并初始化为零值result0,errnil。当你写一个裸return后面不带东西时Go 就默认“把当前result和err的值原样打包返回给调用方。”场景一b 0出错进入函数Go 自动创建result0,errnil。检测到b 0执行err errors.New(...)。执行裸return。此时result还是0err是新错误。返回(0, error)。场景二b ! 0正常进入函数Go 自动创建result0,errnil。跳过if执行result a / b。执行裸return。此时result是计算结果err还是nil。返回(计算结果, nil)。2.闭包中的变量捕获为什么错误写法里所有函数都输出3i不是每次循环都在变吗闭包捕获的是变量本身不是当时的值在错误写法中for循环里的i是同一个变量。每次循环只是修改了这个变量的值0 → 1 → 2 → 3 循环结束。闭包函数func(){ fmt.Println(i) }记住的是i这个变量本身门牌号而不是创建时的数值。等到你真正执行这些函数时比如f : funcs[0]; f()循环早就结束了i已经变成了3。i : i到底干了什么左边的i创建一个全新的、局部的变量作用域仅在本次循环内。右边的i是外层for循环的变量。效果把外层i当前的值复制给内层新的i。结果闭包捕获的是这个全新的内层变量它只属于这一次循环下次循环会再创建另一个新的。funcs : make([]func(), 0)相当于你买了一个空的 “待办事项清单” 本子。funcs append(funcs, func(){...})相当于往这个本子里 “记下一条新任务”。核心连接点类型func()这两行代码能配合工作的唯一桥梁就是括号里的类型func()。代码片段中文直译关键细节make([]func(), 0)制作一个切片这个切片只能用来存放func()类型的东西。指明了仓库的“货架规格”。func(){ fmt.Println(i) }这是一个匿名函数它的签名正是func()无参数、无返回值。生产了一个符合“货架规格”的货物。append(funcs, ...)把货物放到货架上。类型必须严格匹配否则编译报错。如果把它们拆成三个时间点来看逻辑会更清晰// 第一步声明与初始化建立空仓库 // 此时 funcs 的长度为 0容量为 0里面一个函数都没有。 funcs : make([]func(), 0) // 第二步循环制造与入库append 操作 for i : 0; i 3; i { // 此时生成了一个匿名函数对象货物 // append 函数检查这个货物是不是 func() 类型 ✅ 是的。 // 于是 append 将 funcs 扩容并把货物放在索引位置。 funcs append(funcs, func() { fmt.Println(i) }) } // 第三步此时 funcs 变成了一个有 3 个元素的切片 // 结构类似于[ 函数0 , 函数1 , 函数2 ]为什么要用接收你可能会注意到写的是funcs append(...)而不是单纯的append(...)。这是因为Go 的切片在扩容时底层数组的地址可能会变搬仓库。append函数会把新仓库的地址作为返回值返回。如果你不用funcs 接住它你就失去新仓库的钥匙了funcs还是指向那个旧的、没扩容的空仓库。避免的陷阱总结

相关文章:

Go赋值操作的关键细节

一、: 短变量声明的细节1.作用域规则2.重复声明规则3类型推断二、 赋值操作的细节1.类型必须匹配2.多重赋值特性三、 零值初始化细节1.Go为所有类型提供零值四、指针赋值的细节1.基本指针操作理解这段代码的关键在于搞清楚两个概念:普通变量、指针变量,…...

Java生产者消费者模式实战解析

Java生产者消费者模式实战解析异步模式传统版改进版阻塞队列异步模式 传统版 异步模式之生产者/消费者: class ShareData {private int number 0;private Lock lock new ReentrantLock();private Condition condition lock.newCondition();public void increm…...

linux-内核结构体

vma结构体定义在include/linux/mm_types.h中。 每一段(比如代码段、堆、栈)都由一个vma结构体来描述。 它记录了这段内存的起止地址、权限(读写执行)以及背后的存储介质(是匿名内存还是映射了文件)。 权限隔…...

告别电脑噪音!5步掌握免费风扇控制软件FanControl

告别电脑噪音!5步掌握免费风扇控制软件FanControl 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fan…...

C3D行为识别(一):UCF101视频数据集预处理实战与优化

1. UCF101数据集:行为识别的黄金标准 第一次接触行为识别任务时,我面对五花八门的视频数据集简直挑花了眼。经过多次实践对比,UCF101始终是我最推荐新手入门的"教科书级"数据集。这个包含101类人类动作的经典数据集,就像…...

Fan Control:Windows风扇控制终极指南,告别噪音与高温烦恼![特殊字符]

Fan Control:Windows风扇控制终极指南,告别噪音与高温烦恼!🔥 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址…...

如何快速获取百度网盘提取码:开源工具的终极实战指南

如何快速获取百度网盘提取码:开源工具的终极实战指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而烦恼吗?每次遇到需要密码的资源,你都要在多个网页间来…...

GenomicSEM实战指南:从GWAS摘要数据到复杂遗传模型的完整解析

GenomicSEM实战指南:从GWAS摘要数据到复杂遗传模型的完整解析 【免费下载链接】GenomicSEM R-package for structural equation modeling based on GWAS summary data 项目地址: https://gitcode.com/gh_mirrors/ge/GenomicSEM 在基因组学研究中,…...

模拟量采集模块:农机作业监测,传感信号稳定采集

在工业自动化领域,模拟量采集模块是连接物理世界与数字系统的核心桥梁。它的本质是将温度、压力、流量等连续变化的物理量(模拟信号),精准地转换为计算机能识别的数字信号。一、关键技术实现:从物理世界到数字决策 信号采集与转换&#xff1a…...

模拟量采集模块:多点位同步采样,数据一致性更高

无论是车间里机床的振动监测,还是智慧大棚的土壤湿度采集,亦或是变电站的电压电流监测,都离不开它的身影。模拟量采集系列模块连接着现场连续变化的物理量,一边对接着可处理分析的数字系统,默默完成“信号翻译”的核心…...

物联网养殖环控系统:科技赋能,推动传统养殖向数字转型

一、方案概述 物联网养殖环控系统,依托物联网、传感器、大数据、无线通信等核心技术,针对畜禽、水产等各类养殖场景,构建“感知-传输-分析-控制-管理”全链路智能闭环,实现养殖环境多参数实时监测、自动精准调控、远程便捷管理&am…...

OpenClaw 微信部署避坑实操:多模式部署+常见故障速解(附部署包)

前言 在微信私域运营与自动化客服场景中,OpenClaw 可打通微信客户端与后端服务的通信链路,降低接入门槛,支持本地、云端等多环境部署,兼顾数据安全与连接稳定。本文聚焦部署细节与故障排查逻辑,适配中小企业业务落地&…...

揭开推挽电路的奥秘 —— 高效功率放大的经典架构

在模拟电子技术的长河中,推挽电路(Push-Pull Circuit)无疑是功率放大领域的里程碑式设计。它如同电子世界里的 “双人接力赛”,通过两个晶体管的协同工作,高效地完成信号放大任务,彻底改变了传统单管放大电…...

算法动画图解:让复杂逻辑“活”起来的可视化秘籍

还在为算法和数据结构的抽象逻辑感到头疼吗?静态的图文讲解难以形成深刻理解,自己写代码调试又耗时费力。 想让复杂的算法过程真正“活”起来、一目了然?推荐你试试**图码这个宝藏工具。它提供了超过60种数据结构和算法的交互式动画可视化**…...

JVM学习笔记(7) 第三部分 虚拟机执行子系统 第6章 类文件结构

文章目录第6章 类文件结构6.0 个人感悟6.1 概述6.2 无关性的基石6.3 Class类文件的结构6.3.1 魔数与版本号6.3.2 常量池6.3.3 访问标志6.3.4 类索引、父类索引与接口索引集合6.3.5 字段表集合6.3.6 方法表集合6.3.7 属性表集合代码编译的结果从本地机器码转变为字节码&#xff…...

Qwen-Image-2512-SDNQ Web服务实战:支持负面提示词的精准图像生成案例分享

Qwen-Image-2512-SDNQ Web服务实战:支持负面提示词的精准图像生成案例分享 你有没有试过这样的情景:输入“一只穿着西装的柴犬在咖啡馆写代码”,结果生成的图里柴犬手里多了个汉堡、背景里突然冒出三只猫、连咖啡杯都歪着放?不是…...

linux命令的使用、bash命令的使用、ctrl+r查看历史记录、tee命令

文章目录字母表示的含义定位光标移动相关命令inputrc和ctrl退格键为什么不删除单词呢查看文件的实际路径mkdir 已存在目录会覆盖么linux 常用的颜色文件名有特殊符号的时候查看历史命令-history查看历史命令-ctrlrtee命令tee命令写内容tee命令只能替换不能追加吗?记录一些不好…...

终极指南:如何在OPPO手机上配置Salt Player流体云实现多设备音乐无缝切换

终极指南:如何在OPPO手机上配置Salt Player流体云实现多设备音乐无缝切换 【免费下载链接】SaltPlayerSource Salt Player (A local music player trusted and chosen by hundreds of thousands of users) for Android Release, Feedback. 项目地址: https://gitc…...

TrafficMonitor插件系统:打造你的个性化Windows系统监控中心

TrafficMonitor插件系统:打造你的个性化Windows系统监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 你是否厌倦了Windows任务栏上分散的系统监控工具&#x…...

从YOLO到餐桌:构建校园食堂智能结算系统的实战指南

1. 为什么选择YOLO做食堂智能结算? 在校园食堂这种特殊场景下,菜品识别面临着诸多挑战:餐盘堆叠造成的遮挡、反光餐具带来的光线干扰、相似菜品的细微差异(比如青椒炒肉和土豆炒肉)。传统图像处理方法需要针对每种菜品…...

掌握AI教材写作,借助低查重方法打造优质专业教材!

教材创作难题与AI解决方案 很多教材编写者都会遇到一个共同的问题:虽然他们的正文内容经过了精细的打磨,但由于配套资源的缺乏,整体教学效果受到影响。设计不同层次的课后练习往往需要新颖的点子,而很多时候这些灵感难以涌现&…...

【2026年最新600套毕设项目分享】基于微信小程序的童装商城(30023)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

《数论探微:进阶版》(Arithmetic Tales: Advanced Edition)市

一、核心问题及解决方案(按踩坑频率排序) 问题 1:误删他人持有锁——最基础也最易犯的漏洞 成因:释放锁时未做身份校验,直接执行 DEL 命令删除键。典型场景:服务 A 持有锁后,业务逻辑耗时超过锁…...

D3KeyHelper:5分钟掌握暗黑3专业宏工具,告别手动疲劳

D3KeyHelper:5分钟掌握暗黑3专业宏工具,告别手动疲劳 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 如果你还在为暗黑破坏神…...

OBS StreamFX插件终极指南:5个步骤打造电影级直播画面

OBS StreamFX插件终极指南:5个步骤打造电影级直播画面 【免费下载链接】obs-StreamFX StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even custo…...

【2026年最新600套毕设项目分享】微信小程序的个人行政复议在线预约系统(30022)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

FFmpeg swresample库进阶:除了基础转换,swr_alloc_set_opts2还能这样玩(含滤波器与精度设置)

FFmpeg swresample库进阶:解锁swr_alloc_set_opts2的隐藏潜力 在专业音频处理领域,采样率转换的质量直接影响最终输出的听感表现。许多开发者满足于基础参数配置,却忽略了FFmpeg的swresample库中那些能显著提升音质的"隐藏开关"。本…...

logging-flume高可用性设计:故障恢复与负载均衡最佳实践

logging-flume高可用性设计:故障恢复与负载均衡最佳实践 【免费下载链接】logging-flume Apache Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log-like data 项目地址: http…...

DRM框架深度解析:从fbdev到atomic commit的显存绑定全流程

DRM框架深度解析:从fbdev到atomic commit的显存绑定全流程 在Linux图形驱动开发领域,DRM(Direct Rendering Manager)框架作为现代显示子系统的核心,其显存管理机制直接影响图形性能与稳定性。本文将系统剖析DRM框架中显…...

WebPShop:Photoshop WebP插件终极指南 - 如何完美处理现代图像格式

WebPShop:Photoshop WebP插件终极指南 - 如何完美处理现代图像格式 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop WebPShop是Photoshop的专业WebP插件&#xff0c…...