ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Go 新手学习路线:从语法基础到开源项目实战——Go 夜读群 2018-05-16 讨论纪要

Go 新手学习路线:从语法基础到开源项目实战——Go 夜读群 2018-05-16 讨论纪要 Go 新手学习路线从语法基础到开源项目实战——Go 夜读群 2018-05-16 讨论纪要【免费下载链接】nightWeekly Go Online Meetup via BilibiliGo 夜读通过 bilibili 在线直播的方式分享 Go 相关的技术话题每天大家在微信/telegram/Slack 上及时沟通交流编程技术话题。项目地址: https://gitcode.com/gh_mirrors/ni/night本文整理自『Go 夜读』微信群 2018-05-16 的一场关于「Go 学习之路」的讨论回答的核心问题是没有任何底层语言基础的小白如何入门 Go 并持续进阶。文章完整保留了群内推荐的学习阶段划分基础语法 → 数据结构与算法 → 动手写工具/爬虫、书籍资料清单与适合新手的开源项目清单并结合 Go 夜读仓库内已有的源码阅读与算法讨论资源为每一步学习路径补充可验证的落地材料。读完本文你将获得一份可直接执行的新手 Go 学习路线图以及每个阶段对应的书籍、项目和进阶源码。讨论背景一次微信群里的 Go 学习经验碰撞『Go 夜读』TalkGo是一个通过 Bilibili 在线直播方式定期分享 Go 技术话题的社区微信群是社区成员日常交流技术问题的主阵地之一本仓库 discuss 讨论系列 即沉淀了这类微信群讨论。2018-05-16 的讨论围绕一个非常典型的问题展开有没有适合小白看的项目没有底层语言基础提问者的画像很清晰没有底层语言基础是完完全全的新手。群内成员给出的回答并没有停留在推荐某个项目的单一层面而是先勾勒了一条完整的学习路径再给出每个阶段对应的书籍与项目这正是本文要还原的主线。第一步系统过一遍基础语法群内给出的第一条建议非常朴素但关键先系统过一遍基础语法。对于没有编程语言基础或没有底层语言基础的读者跳过语法直接扎进框架或源码往往会因为关键字、类型系统、并发原语等概念缺失而陷入挫败。Go 的基础语法覆盖面包括变量与常量、基本类型与复合类型数组、切片、map、结构体、流程控制、函数与方法、接口、错误处理、并发原语goroutine、channel、select等。这一阶段的目标不是背诵而是能够流畅写出不依赖框架的小程序。Go 夜读仓库中大量「讨论」与「夜读」文章恰好覆盖了语法进阶中的高频疑难点可作为语法学完后加深理解的配套材料例如Go 语言中下划线的用法分析总结从encoding/binary源码中的_ b[7]出发剖析下划线的多种语义for range 的深入分析理解 range 在切片、map、channel 上的行为差异make 与 new 的区别新手最容易混淆的两个内建函数Go 语言中字符串与字节切片的转换。这些文章说明一个事实语法阶段的问题并不浅把它学扎实本身就是一门功课。第二步把数据结构与排序算法都撸一遍群内第二条建议是看了 Go 基础之后可以把数据结构排序、树、表等都撸一遍。这里的思路是用 Go 重新实现一遍经典数据结构与算法达到双重效果巩固语法写二叉树、链表、哈希表等结构时指针、结构体、切片、递归、方法接收者等语法会被反复使用建立算法功底排序快排、归并、堆排等、树二叉搜索树、平衡树、表线性表、哈希表是后续阅读框架源码和应对面试的必备基础。Go 夜读仓库在算法方向上有专门的内容沉淀content/algorithms 目录例如 2020-12-28 的树构造专题 就从如何把有序数组转换为二叉搜索树入手配合递归提示引导成员动手实现。这可以看作本建议在社区实践中的延续算法学习不是一次性行为而是需要持续训练的长期工程。第三步自己动手写点工具、爬虫进步最快群内一致认可的观点是自己写点工具、爬虫之类的进步比较快。这个建议的实质是以项目驱动学习。对新手而言两个方向都足够小但又足够完整小工具例如批量文件重命名、日志分析、命令行小工具等能完整走一遍需求 → 设计 → 编码 → 测试 → 运行的闭环爬虫涉及 HTTP 客户端、HTML/JSON 解析、并发抓取、去重与存储恰好能倒逼新手使用 Go 最擅长的标准库net/http、encoding/json和 goroutine 并发特性。在动手阶段仓库中的两个练习型项目可作为参考examples/gin_examples一个基于 Gin 的完整 Web 服务示例包含配置、认证、路由、中间件、服务层、测试pkg/auth、pkg/http、pkg/service等可以对照学习一个真实项目的分层结构practice/reading-go-43Go 夜读第 43 期配套的练习代码展示读文章 跑代码的结合方式。书籍与资料推荐针对没有底层语言基础的新手群内推荐的资料按难度梯度排列如下资料定位适合人群『Go 学习之路』Go 夜读社区维护的学习资料库系统性学习路径导览所有阶段的 Go 学习者特别是新手『Go 语言实战』面向实战的基础书从入门到深入已完成或正在学习基础语法的新手『Go 语言系列』微信专栏连载入门到深入的分篇讲解适合碎片化学习习惯按篇阅读的初学者『Go 语言学习笔记』雨痕语法介绍 源码剖析底层知识较多不适合初学者建议有相当基础后再读『编程书籍的整理和收集』书籍资源合集需要按需检索资料的学习者其中需要特别说明两点『Go 语言实战』是群内明确推荐的入门书特点是重实践、轻说教章节按能跑起来组织与先基础后实战的路线高度契合『Go 语言学习笔记』虽然口碑很好但群内特意提示它包含大量源码剖析与底层知识可能不适合初学者。这条提示很有价值——新手阶段不必硬啃底层实现把有限的精力放在语法与项目上等有基础后再回头读源码类书籍效果远好于一开始就陷入runtime细节。适合小白的开源项目推荐这是本次讨论的核心输出。群内推荐的四个项目恰好覆盖了服务端开发的几个典型方向beegoWeb 框架beego 是国产老牌 Go Web 框架集路由、ORM、Session、日志等能力于一体。推荐理由在于框架完整、生态齐全新手可以通过一个框架同时接触 MVC 分层、中间件、模板渲染等 Web 开发的核心概念而不必在多个库之间来回跳转。说明beego 版本迭代较快学习时建议以官方当前稳定版本的文档为准框架层面的学习目标是理解 Web 应用的组织方式而非死记 API。BoltDB注释详细、代码量少的数据库源码BoltDB 是一个纯 Go 实现的嵌入式 KV 存储数据库。群内推荐时特别强调了两点代码不多、注释比较详细作为学习容易入门同时也明确指出该项目已停止维护。这恰恰是它作为源码学习材料的价值所在体量小意味着能在有限时间内通读注释详细意味着每个关键结构B 树页面、事务、游标等都能读明白。从源码结构看其核心代码集中在一个主包内适合作为第一个完整通读的 Go 项目。需要留意的是由于项目不再维护生产环境应优先考虑其社区继任者bbolt 等但作为学习样本它依然合格。urfave/cli命令行工具框架urfave/cli 是 Go 生态中非常流行的命令行应用开发框架。推荐它作为学习项目的原因很直接提供flag、子命令、帮助信息等完整能力代码结构清晰是学习如何设计一个易用的 Go API的好样本学习成本低配合自己写点工具的学习路线可以立刻派上用场——用 urfave/cli 把第三步中的小工具包成带子命令、参数解析的正式 CLI。grpc-gateway 与 grpc-go进入 RPC 世界grpc-go 是 Go 语言的 gRPC 官方实现grpc-gateway 则负责把 gRPC 服务以 RESTful/JSON 的方式暴露给外部调用方。两者搭配构成了微服务内部 RPC 对外 HTTP 网关的经典架构。对新手而言这两个项目的价值在于gRPC 是 Go 服务端开发绕不开的通信方案通过阅读或使用这两个项目可以一次性理解 protobuf 定义、服务注册、拦截器、HTTP/2 传输等概念。Go 夜读仓库中也有对应的源码分析内容例如 第 17 期 grpc 开发及 grpcp 的源码分析可作为阅读这两个项目时的伴读材料。进阶从会写到会读源码本次讨论虽然是面向新手的但群内推荐的 BoltDB、grpc-go 等项目已经把读源码埋进了学习路线——读完一本入门书、写完几个工具之后下一个台阶就是读懂别人怎么设计。Go 夜读仓库恰好沉淀了大量源码阅读成果可作为进阶阶段的路标第 44 期 Go map 源码阅读分析第 32 期 etcd raft 源码阅读Go 标准库 sync 系列源码分析第 35 期 context 源码阅读第 36 期 k8s context 源码阅读这些内容的共同特征是从具体符号和调用链出发逐段还原设计意图与BoltDB 注释详细适合入门的逻辑一脉相承——好的源码就是最好的教材。小结一条可执行的新手路线将 2018-05-16 的群内讨论浓缩成一张路线图系统过一遍 Go 基础语法——以『Go 语言实战』等为教材不求背诵但求能写用 Go 重写数据结构与排序算法——树、表、排序都撸一遍语法与算法双丰收写工具、写爬虫——用真实项目驱动学习快速获得正反馈读一个注释好的小项目——从 BoltDB 这类代码少、注释详细的项目开始迈入源码阅读沿框架与 RPC 方向展开——beego、urfave/cli、grpc-gateway、grpc-go 分别对应 Web、CLI、RPC 三条主线按兴趣选择深耕。这条路线最核心的经验只有一句先动手再深挖。语法、算法、项目、源码四个阶段层层递进任何一步都值得用仓库中对应的讨论与源码阅读文章做伴读。【免费下载链接】nightWeekly Go Online Meetup via BilibiliGo 夜读通过 bilibili 在线直播的方式分享 Go 相关的技术话题每天大家在微信/telegram/Slack 上及时沟通交流编程技术话题。项目地址: https://gitcode.com/gh_mirrors/ni/night创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表