时间戳转换工具

源码阅读原则

  • 不要纠结代码细节,要对所阅读的项目有全局整体的认识。
  • 阅读README.md文档,优秀的开源项目都有README.MD文档,通过阅读这种文档,让我们对项目是什么,能做什么,怎么用有一个整体的认识。
  • 在使用与调试中去验证自己的理解。
  • 用思维导图可以更好帮我们记录代码的执行流程。
  • 不要想着一口气吃成胖子。

  • 小技巧

    对一个Go语言库(标准库或第三方)阅读正常源码的正常顺序是:

    库函数 > 结构定义 > 结构函数


    理清库函数

    所谓的库函数,在Go语言的库中,就是这个库对外的提供功能的函数,也就是首字母大写的函数。

    我们使用go doc命令,再配置linux的grep命令,就可以筛选出一个库的库函数了,以context包为例:

    go doc context | grep "^func"

    执行结果:

    func WithCancel(parent Context) (ctx Context, cancel CancelFunc)
    func WithDeadline(parent Context, d time.Time) (Context, CancelFunc)
    func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)

    对于第三方,我们把源码下载到本地后,通过cd命令,进入到源码目录,再执行上述命令,也一样可以获得库函数列表,如:

    go doc | grep "^func"

    梳理结构的定义

    一个优秀库一般都会定义许多struct进行功能封装,所以明白一个库中的struct的定义,对我们理解库的逻辑与功能至关重要。

    我们同样使用go doc来筛选struct,以time包为例:

    go doc time | grep "^type"|grep struct

    执行结果:

    type Location struct{ ... }
    type ParseError struct{ ... }
    type Ticker struct{ ... }
    type Time struct{ ... }
    type Timer struct{ ... }

    探究结构方法

    在第二步中,梳理了一个Go的结构定义,也就是梳理一个库有多少个struct,而这些struct会有对应的方法(method),用于实现功能,通过理解struct的方法,就可以明白这个struct在这个库到底是用来做什么的。

    对于struct方法,也可以先看那些以大写字母开头的方法,因此这些是这个struct提供对外的功能。


    小结

    理清库函数,可以让我们明白一个库的对外功能,梳理结构定义,可以让我们明白一个库如何组织代码去提供功能,最后探究结构方法,可以明白具体的实现逻辑;只要我们遵循这样的方法去阅读Go库的源码,相信一定会事半功倍的!


    如何阅读Golang的源码
    记录阅读go源码的博客
    Go项目源码阅读小技巧

    联系我们 - 首页 - 关于我们
    Copyright © 2017-2022 iteam. All Rights Reserved. Current version is 2.50.0.
    粤ICP备17021424号
    VV:34731 UV:113018 PV:386314