高效阅读GO代码

简介: 高效阅读GO代码
  1. 带着问题找答案
  2. main/test 入口函数
  3. package
  4. Exported function层级调用
  5. 兴趣
  6. 变更Commit

从什么角度读代码

  • 学习优雅代码(这里的优雅我暂时分为这几类)
  • 这种目的的代码阅读,需要有系统底层相关的背景,包括但不仅限于:操作系统,文件系统,IO异步处理,网络编程,并发处理机制等等。带着相关背景去看代码实现,结合具体系统负载看目标库是如何做技术选型的,建议在过程中不断用benchmark验证想法
  • 这种目的的代码阅读,需要有一定的背景知识,了解目标库的具体业务场景,从具体场景出发,了解目标库的代码实现优雅之美,自己带着问题思考,如果自己来做同样功能/逻辑的实现,能否有不同的方法,再和目标库的实现作对比
  • 架构优雅:简洁优雅的架构/抽象,如何恰当使用语言机制实现具体功能
  • 性能优雅:如何提升代码性能,这部分一般偏向并发编程&底层编程
  • 学习编写健壮代码
  • 这种目的的代码阅读,需要从具体问题出发,一般从issue开始,看某些具体场景下会出现什么问题,后面又有什么相关的讨论,之后结合Pull Request又是做出了怎样的修复。从这个完整的链路出发,了解到:什么场景下容易出现问题;有哪些常见问题;针对这些问题一般有哪些常见的问题定位思路;如果前面几步都很顺利的话,最后的解决方案几乎是最简单的步骤了。整个链路中最重要的部分是issue上线文的阅读以及PR讨论的阅读,代码的具体实现倒并不是最最重要的
  • 了解自己常使用库的实现
  • 这种目的出发的代码阅读目的性就很明确,就是为了看自己使用库是否有潜在的“坑”?是否能满足自己的使用场景?这种情况可以结合自己的具体使用场景,针对库里的不同方法,一点一点做test和benchmark,验证正确性和性能,保证逻辑和性能都能够满足自己的需求

阅读代码从哪儿来?

  • 首先是Go语言的官方网站blog.golang.org/ ,会介绍很多Go的最佳实践,如果对背后的具体实现逻辑感兴趣,可以去阅读相关代码
  • 其次是Go邮件组groups.google.com/forum/#!for… 这里会有很多Go主题的讨论,Go core team的工程师也会在这里回答很多问题
  • 还有就是你所关注库的Github issue区,经常会有一些求助&讨论
  • 最后是Go的语言提案github.com/golang/prop…新的语言层级的提案会在这里列出,可以最快掌握语言层面的新特性

网站资料:

初阶资料:

golang.org/doc

blog.golang.org

golang.org/pkg

进阶资料:

dev.golang.org

github.com/golang/go

github.com/golang/prop…

github.com/golang/go/w…

go-review.googlesource.com

groups.google.com/g/golang-nu…

groups.google.com/g/golang-de…

groups.google.com/g/golang-to…

twitter.com/home

reddit.com/r/golang

前沿资料:

www.sigplan.org

dl.acm.org

arxiv.org/list/cs.PL/…

scholar.google.de


相关文章
|
5月前
|
Go 索引
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
|
2月前
|
Cloud Native Go 开发工具
不改一行代码轻松玩转 Go 应用微服务治理
为了更好的进行 Go 应用微服务治理,提高研发效率和系统稳定性,本文将介绍 MSE 微服务治理方案,无需修改业务代码,实现治理能力。
19800 3
|
4月前
|
算法 程序员 编译器
美丽的代码:规范go应用代码注释
【6月更文挑战第30天】本文介绍注释应与代码同步,避免误导,且关键点解释。使用LLVM构建编译器示例展示Go语言规范。注释虽有局限,但在解释复杂逻辑、业务规则时仍有其价值。程序员需平衡注释与代码的关系,创造更优的代码。
1055 0
美丽的代码:规范go应用代码注释
|
10天前
|
JSON 搜索推荐 Go
ZincSearch搜索引擎中文文档及在Go语言中代码实现
ZincSearch官网及开发文档均为英文,对非英语用户不够友好。GoFly全栈开发社区将官方文档翻译成中文,并增加实战经验和代码,便于新手使用。本文档涵盖ZincSearch在Go语言中的实现,包括封装工具库、操作接口、统一组件调用及业务代码示例。官方文档https://zincsearch-docs.zinc.dev;中文文档https://doc.goflys.cn/docview?id=41。
|
2月前
|
缓存 NoSQL 数据库
go-zero微服务实战系列(五、缓存代码怎么写)
go-zero微服务实战系列(五、缓存代码怎么写)
|
2月前
|
程序员 测试技术 Go
用 Go 编写简洁代码的最佳实践
用 Go 编写简洁代码的最佳实践
|
2月前
|
缓存 测试技术 Go
使用Singleflight优化Go代码
使用Singleflight优化Go代码
|
2月前
|
JSON 数据库连接 Go
10个令人惊叹的Go语言技巧,让你的代码更加优雅
10个令人惊叹的Go语言技巧,让你的代码更加优雅
|
2月前
|
Java 数据库连接 数据库
携手前行:在Java世界中深入挖掘Hibernate与JPA的协同效应
【8月更文挑战第31天】Java持久化API(JPA)是一种Java规范,为数据库数据持久化提供对象关系映射(ORM)方法。JPA定义了实体类与数据库表的映射及数据查询和事务控制方式,确保不同实现间的兼容性。Hibernate是JPA规范的一种实现,提供了二级缓存、延迟加载等丰富特性,提升应用性能和可维护性。通过结合JPA和Hibernate,开发者能编写符合规范且具有高度可移植性的代码,并利用Hibernate的额外功能优化数据持久化操作。
37 0
|
2月前
|
Go C语言
Go语言:新时代的编程英雄,让你的代码驾驭未来!
【8月更文挑战第29天】Go,或称Golang,是由谷歌开发的一种静态强类型的编译语言,旨在融合C语言的高效性和高级语言的易用性。它简洁、优雅,广泛应用于高性能服务器和网络应用开发。本文将通过环境搭建、Hello World示例、变量、常量、控制结构、函数、结构体、接口及错误处理等示例,带你快速入门Go语言,领略其简洁高效的魅力,激发你的编程热情。
38 0