分类: Go 1.26
-
本文针对Go语言goroutine初学者,通过解析主线程与协程的执行关系,拆解了4种不同场景的并发流程。文章详细对比了开启与未开启goroutine在同步执行、并发调度及生命周期管理上的本质区别,结合代码和流程图分析了time.Sleep在调度切换中的作用,并总结了主线程退出导致协程强制终止等核心规则,帮助开发者快速掌握goroutine的基础用法与避坑要点。
-
本文介绍了如何利用 Go 1.18 引入的泛型特性,从零构建类型安全的通用单向链表。文章详细讲解了节点结构定义、Append 与 Prepend 等基础操作,并实现了 Map、Filter 和 Iterate 等函数式风格的高阶功能。此外,还探讨了使用 comparable 约束进行搜索、Nil 安全检查以及删除元素的逻辑,最终展示了泛型在提升代码复用性与编译期类型安全方面的优势。
-
在 Go 开发实战中,解决程序命令行运行正常但 VSCode IDE 报错的问题。先排查网络原因,针对依赖下载失败调整代理设置。随后分析发现错误源于 IDE 语言服务器 gopls 缓存了旧状态。最终在确保命令行执行成功的基础上,通过刷新或重启语言服务器同步最新信息,成功消除了 IDE 的红色波浪线提示。
-
本文结合 Go Tour 练习探讨了实现自定义 error 接口的过程,通过定义 ErrNegativeSqrt 类型并编写 Error 方法来处理负数平方根的计算。重点分析了在 Error 方法中使用 fmt.Sprint 可能引发的无限递归陷阱,解释了其调用机制,并提出了通过类型转换为 float64 打破循环的解决方案,最终总结出接口隐式实现及类型转换在错误处理中的注意事项。
-
本文介绍了在Go语言入门练习中,利用闭包实现斐波那契数列生成器的方法。文章详细说明了实现需求,即编写一个返回闭包的函数,该闭包每次被调用时返回数列的下一个值。通过在闭包外部定义变量来捕获并保留状态,利用并行赋值更新数值,最终实现了连续生成斐波那契数列的功能,并验证了运行结果。
-
本文记录了Go语言单词计数练习的实现过程。通过使用strings.Fields函数分割字符串,并利用for range循环遍历切片,实现了将字符串中单词出现次数存入map的逻辑。文章详细解析了map的初始化与默认值特性,展示了代码实现与wc.Test测试验证过程,适合初学者巩固Maps用法及相关标准库函数的应用。
-
本文记录了在 WSL 与 Docker 环境下本地运行 Go Tour 切片练习时遇到的依赖问题。由于国内代理未缓存 golang.org/x/tour 包,导致安装依赖时出现 502 报错。通过分析发现是系统 GOPROXY 环境变量限制所致,最终采用临时取消环境变量并直接访问官方源的方式成功安装依赖。文章详细梳理了从报错排查到成功运行并生成图片的完整解决过程。
-
本文基于 Go 官方教程练习,介绍了利用牛顿迭代法实现 Sqrt(x) 的三种方式。文章演示了从固定 10 次循环,到通过误差控制自动停止迭代的优化过程。最终实现将结果与 math.Sqrt 进行对比,验证了算法的准确性,并通过统计迭代次数展示了该方法仅需 5 次循环即可获得高精度的收敛效率。
-
在 VS Code 中按下 Ctrl + S 时文件内容被还原至上一步,经检查发现开启了 Editor: Format On Save 功能。该现象并非保存操作触发了撤销,而是 Go 语言的自动格式化工具在保存时将代码修正为合法状态。修正代码中的命名规范后,Ctrl + S 即可正常保存文件。
-
在 VS Code 中编写 Go 代码时遇到 main redeclared in this block 报错,原因是目录下存在多个 main 函数。通过重新整理 A Tour of Go 的练习目录结构,将文件名作为目录名并统一文件名为 main.go,确保每个练习都能独立运行且互不干扰。最终解决了重复声明的问题。
