)
示例工程教程【免费下载链接】learngo❤️ 1000 Hand-Crafted Go Examples, Exercises, and Quizzes. Learn Go by fixing 1000 tiny programs.项目地址https://gitcode.com/gh_mirrors/le/learngo点击查看免费下载赋值Assignment是 Go 语言中每个变量操作的基础动作。本篇以 learngo 仓库中《06-变量 / 04-赋值》练习集为核心通过 10 个由浅入深的迷你程序系统讲解 Go 的赋值语义赋值即复制值、表达式赋值、多重赋值、变量交换与空白标识符丢弃返回值等核心技巧。学完本篇你将能准确区分声明与赋值、熟练写出可运行的赋值代码并理解path.Split、多返回值函数等标准库用法背后的赋值原理。一、赋值的本质一切皆为复制在 Go 中赋值意味着复制值。当你执行a b时b中的值被复制一份写入a此后二者互不影响。这一点在后续学习切片、结构体等复合类型时同样成立复制的是整个值是理解 Go 内存模型的第一块基石。先看一段演示赋值的教学源码 06-variables/04-assignment/01-overview/main.gopackage main import fmt func main() { var counter int fmt.Println(counters name : counter) fmt.Println(counters value:, counter) fmt.Printf(counters type : %T\n, counter) counter 10 // OK // counter ten // NOT OK fmt.Println(counters value:, counter) counter fmt.Println(counters value:, counter) }这段代码揭示了赋值三条基本规则赋值必须类型匹配counter是int只能赋整数注释中的counter ten会编译报错Go 是强类型语言赋值不做隐式类型转换赋值改变变量的值counter 10把原来的零值0覆盖为10赋值后变量可继续参与运算counter等价于counter counter 1输出最终为11。二、练习 1让它变蓝Make It Blue—— 最朴素的赋值第一个练习只要求修改一个字符串变量的值。挑战文件在 translation/chinese/06-变量/04-赋值/练习/01-make-it-blue/main.go它给了你一个注释掉的声明// color : green // 在下面写上你的代码: // ?去掉注释并补上赋值参考解法见 01-make-it-blue/solution/main.gopackage main import fmt func main() { color : green color blue fmt.Println(color) }要点color : green是短变量声明声明 初始化合一步color blue是纯赋值变量已存在只需用覆盖旧值不能再写:程序输出blue证明赋值确实把内存里的值替换掉了。三、练习 2变量到变量Vars to Vars—— 在赋值表达式中引用变量第二个练习故意设置限制不允许直接写color dark green而必须用变量自己给自己赋值。挑战见 02-vars-to-vars/main.go解法在 02-vars-to-vars/solution/main.gopackage main import fmt func main() { color : green // dark color 是一个表达式 color dark color fmt.Println(color) }这里的关键是赋值语句右侧的表达式先求值再写入左侧变量计算dark color字符串拼接操作符把dark 与color当前值green串联成dark green把新值复制给color输出dark green。由于赋值右侧先于左侧更新求值用变量自身参与运算累加、拼接、自增是安全的这是 Go 中常见的惯用法。四、练习 3用表达式赋值Assign with Expressions—— 让结果来自计算第三个练习演示如何把一段算术表达式的计算结果赋给变量。挑战文件 03-assign-with-expressions/main.go 预先声明了一个float64变量// 声明一个新的 float64 变量 // 0. 代表 0.0 n : 0.解法见 03-assign-with-expressions/solution/main.gopackage main import fmt func main() { n : 0. n 3.14 * 2 fmt.Println(n) }输出6.28。两个细节值得注意3.14 * 2是乘法表达式运算结果6.28浮点数被整体复制给n字面量0.表示浮点数0.0Go 允许省略小数点后的0。五、练习 4求矩形周长Find the Rectangles Perimeter—— 分组声明后赋值这个练习引入了var分组声明要求先算后赋。挑战见 04-find-the-rectangle-perimeter/main.go其模板为var ( perimeter int width, height 5, 6 )解法在 04-find-the-rectangle-perimeter/solution/main.gopackage main import fmt func main() { var ( perimeter int width, height 5, 6 ) // 首先计算: (宽 高) // 然后: 用 2 与它相乘 perimeter 2 * (width height) fmt.Println(perimeter) }要点周长公式2 × (宽 高)中括号优先级与数学一致先加后乘结果为22perimeter声明时只给类型int零值0随后用赋值语句填充计算结果width, height 5, 6是分组声明里的多变量初始化一次为两个变量赋值与后面要讲的多重赋值一脉相承。六、练习 5 与 6多重赋值Multi Assign—— 一次赋值多个变量Go 支持一条语句同时给多个变量赋值。练习 5 挑战见 05-multi-assign/main.go解法在 05-multi-assign/solution/main.gopackage main import fmt func main() { var ( lang string version int ) lang, version go, 2 fmt.Println(lang, version, version) }练习 6 更进一步一次赋三种不同类型的值解法见 06-multi-assign-2/solution/main.gopackage main import fmt func main() { var ( planet string isTrue bool temp float64 ) planet, isTrue, temp Mars, true, 19.5 fmt.Println(Air is good on, planet) fmt.Println(Its, isTrue) fmt.Println(It is, temp, degrees) }多重赋值的规则左侧变量与右侧值一一对应、位置匹配planet得Mars、isTrue得true、temp得19.5左右两侧数量必须一致否则编译报错不同变量可以拥有不同静态类型Go 会在编译期逐一检查类型匹配。这也呼应了教学示例 06-variables/04-assignment/05-multiple-assignment/main.go 中的用法——speed, now 100, time.Now()同时赋一个int和一个time.Time。七、练习 7多重简短函数Multi Short Func—— 多返回值与空白标识符函数可以返回多个值配合简短赋值一次性接收。挑战见 07-multi-short-func/main.go解法在 07-multi-short-func/solution/main.gopackage main import fmt func main() { _, b : multi() fmt.Println(b) } func multi() (int, int) { return 5, 4 }核心知识点multi()声明了两个返回值(int, int)调用时返回5, 4_, b : multi()用空白标识符_丢弃第一个返回值5把第二个值4赋给b输出4。这是 Go 处理只关心部分返回值的标准姿势也是下面练习 10 的前置铺垫。八、练习 8 与 9交换器Swapper—— 零临时变量交换多重赋值最大的价值之一无需临时变量即可交换两个变量的值。练习 8 要求先赋值再交换为新值解法见 08-swapper/solution/main.gopackage main import fmt func main() { color, color2 : red, blue color, color2 orange, green fmt.Println(color, color2) }练习 9 则要求真正交换red与blue的当前值解法在 09-swapper-2/solution/main.gopackage main import fmt func main() { red, blue : red, blue red, blue blue, red fmt.Println(red, blue) }red, blue blue, red是整篇练习的点睛之笔Go 保证多重赋值先并行求值右侧全部表达式再统一写入左侧变量因此右侧的blue与red读到的都是交换前的旧值执行后两个变量完成互换无需任何中间变量。输出为blue red。同样的模式也出现在教学示例 06-variables/04-assignment/06-swapping/main.go 中speed, prevSpeed prevSpeed, speed九、练习 10丢弃文件Discard the File—— 结合标准库path.Split最后一个练习把赋值、多返回值与空白标识符合在一起实战。挑战见 10-discard-the-file/main.go解法在 10-discard-the-file/solution/main.gopackage main import ( fmt path ) func main() { dir, _ : path.Split(secret/file.txt) fmt.Println(dir) }说明标准库path包的Split函数返回(dir, file)两个字符串把路径拆成目录与文件名两部分dir, _ : path.Split(...)用_丢弃文件名部分只保留目录secret/程序输出secret/。教学示例 06-variables/04-assignment/08-path-project-discarding/main.go 演示了反向需求——丢弃目录、保留文件名var file string _, file path.Split(css/main.css) fmt.Println(file:, file) // 输出: main.css若两个返回值都需要也可以全部接收dir, file : path.Split(css/main.css)见 06-variables/04-assignment/09-path-project-shortdecl/main.go。这里还应注意与:的区别变量已声明var file string时用赋值全新变量则用:声明并赋值。十、练习总览与运行方式下表汇总全部 10 个练习及其相对仓库根目录的路径序号练习主题挑战文件参考解法1让它变蓝基本字符串赋值01-make-it-blue/main.gosolution2变量到变量表达式中复用变量02-vars-to-vars/main.gosolution3用表达式赋值算术表达式赋值03-assign-with-expressions/main.gosolution4求矩形周长分组声明后赋值04-find-the-rectangle-perimeter/main.gosolution5多重赋值一次赋值两个变量05-multi-assign/main.gosolution6多重赋值 #2一次赋值三类变量06-multi-assign-2/main.gosolution7多重简短函数多返回值 空白标识符07-multi-short-func/main.gosolution8交换器多重赋值改写值08-swapper/main.gosolution9交换器 #2无临时变量交换09-swapper-2/main.gosolution10丢弃文件path.Split 丢弃返回值10-discard-the-file/main.gosolution每个练习目录内都包含一个带 TODO 注释的main.go挑战版与solution/main.go完整解法。运行方式进入任一练习目录后执行go run main.go或go run solution/main.go即可对照期望输出验证结果。十一、小结赋值的五条实战法则回顾全部练习可提炼出 Go 赋值最实用的五条法则赋值即复制把右侧的值复制进左侧变量类型必须匹配先求值后写入右侧表达式包括引用变量自身总是先完整计算再更新左侧多重赋值并行a, b x, y一一对应赋值是交换两个变量a, b b, a的最简方式多返回值天生配对函数多返回值可直接用多重赋值接收_用于丢弃不需要的值与:分工明确新变量用:声明并赋值已有变量只能用。如果你想继续深挖变量声明的更多细节可以接着学习同一章节的声明与短声明练习若想验证自己对多重赋值、强类型转换的理解还可以尝试仓库根目录下对应的英文练习集10 个练习一一对应。赋值是通往 Go 一切编程能力的起点——吃透复制、并行、丢弃这三个关键词后续的切片、结构体与函数参数传递都会事半功倍。赞分享示例工程教程【免费下载链接】learngo❤️ 1000 Hand-Crafted Go Examples, Exercises, and Quizzes. Learn Go by fixing 1000 tiny programs.项目地址https://gitcode.com/gh_mirrors/le/learngo点击查看免费下载相关推荐qiankun 微前端框架快速入门安装、注册与启动实战指南qiankun 微前端框架快速入门安装、注册与启动实战指南 导读 本文以 qiankun乾坤微前端框架的官方快速开始文档为骨架系统讲解从安装、在主应用示例工程教程学习 Go 赋值Assignment基于 learngo 仓库 10 道实战练习彻底掌握变量赋值学习 Go 赋值Assignment基于 learngo 仓库 10 道实战练习彻底掌握变量赋值 本指南以 06 variables/04 assignm示例工程教程Go 变量赋值Assignment完全指南基于 learngo 仓库的语法、类型规则与实战练习Go 变量赋值Assignment完全指南基于 learngo 仓库的语法、类型规则与实战练习 导读 本文以 learngo 仓库中 06 variabl示例工程教程上一篇推荐文章深度解析PostgreSQL查询计划的利器 —— Postgres Explain Visualizerpev下一篇探索未来浏览方式Neko虚拟浏览器项目深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考