系统入门深度学习,直击算法工程师

77 阅读5分钟

系统入门深度学习,直击算法工程师

开端读 Go 源码了

为什么从 Go 规范库的源码开端读呢?由于最近也看了一些 Go 底层原理的书,说实话,像 goroutine 调度,gc 渣滓回收这些内容,基本就看不懂。这要是一上来就读这局部代码,恐怕直接就放弃 Go 言语学习了。

而规范库就不一样了,有一局部代码基本不触及底层原理,完成也相对简单,同时又能对 Go 的理念加深了解,作为入门再好不过了。然后再由简入深,按部就班,就像打怪晋级一样,一步一步降服 Go。

说了这么多,那到底应该怎样读呢?我想到了一些办法:

  • 看官方规范库文档。
  • 看网上其别人的技术文章。
  • 写一些例子来练习如何运用。
  • 假如能够的话,本人完成规范库的功用。
  • 将本人的阅读心得总结输出。

能够经过上面的一种或几种办法相分离,然后再不时阅读不时总结,最终找到一个完整合适本人的办法。

下面是我总结的一些规范库及功用引见:

  • ​archive/tar​​ 和​​/zip-compress​​:紧缩(解紧缩)文件功用。

  • ​fmt​​-​​io​​-​​bufio​​-​​path/filepath​​-​​flag​​:

  • ​fmt​​:提供格式化输入输出功用。

  • ​io​​:提供根本输入输出功用,大多数是盘绕系统功用的封装。

  • ​bufio​​:缓冲输入输出功用的封装。

  • ​path/filepath​​:用来操作在当前系统中的目的文件名途径。

  • ​flag​​:提供对命令行参数的操作。

  • ​strings​​-​​strconv​​-​​unicode​​-​​regexp​​-​​bytes​​:

  • ​strings​​:提供对字符串的操作。

  • ​strconv​​:提供将字符串转换为根底类型的功用。

  • ​unicode​​:为 unicode 型的字符串提供特殊的功用。

  • ​regexp​​:正则表达式功用。

  • ​bytes​​:提供对字符型分片的操作。

  • ​index/suffixarray​​:子字符串快速查询。

  • ​math​​-​​math/cmath​​-​​math/big​​-​​math/rand-sort​​:

  • ​math​​:根本的数学函数。

  • ​math/cmath​​:对复数的操作。

  • ​math/rand​​:伪随机数生成。

  • ​sort​​:为数组排序和自定义汇合。

  • ​math/big​​:大数的完成和计算。

  • ​container​​-​​/list​​-​​/ring​​-​​/heap​​:

  • ​list​​:双链表。

  • ​ring​​:环形链表。

  • ​heap​​:堆。

  • ​compress/bzip2​​-​​/flate​​-​​/gzip​​-​​/lzw​​-​​zlib​​:

  • ​compress/bzip2​​:完成 bzip2 的解压。

  • ​flate​​:完成 deflate 的数据紧缩格式,如 RFC 1951 所述。

  • ​gzip​​:完成 gzip 紧缩文件的读写。

  • ​lzw​​:Lempel Ziv Welch 紧缩数据格式完成。

  • ​zlib​​:完成 zlib 数据紧缩格式的读写。

  • ​context​​:用来简化关于处置单个恳求的多个 goroutine 之间与恳求域的数据、取消信号、截止时间等相关操作。

  • ​crypto​​-​​crypto/md5​​-​​crypto/sha1​​:

  • ​crypto​​:常用密码常数的汇合。

  • ​crypto/md5​​:MD5 加密。

  • ​crypto/sha1​​:SHA1 加密。

  • ​errors​​:完成操作出错的办法。

  • ​expvar​​:为公共变量提供规范化的接口。

  • ​hash​​:一切散列函数完成的通用接口。

  • ​html​​:HTML 文本转码转义功用。

  • ​sort​​:提供用于对切片和用户定义的汇合停止排序的原始函数。

  • ​unsafe​​:包含了一些突破 Go 言语「类型平安」的命令,普通程序不会运用,可用在 C/C++ 程序的调用中。

  • ​syscall​​-​​os​​-​​os/exec​​:

  • ​syscall​​:提供了操作系统底层调用的根本接口。

  • ​os​​:提供应我们一个平台无关性的操作系统功用接口,采用类 Unix 设计,躲藏了不同操作系统间差别,让不同的文件系统和操作系统对象表现分歧。

  • ​os/exec​​:提供了运转外部操作系统命令和程序的方式。

  • ​time​​-​​log​​:

  • ​time​​:日期和时间的根本操作。

  • ​log​​:记载程序运转时产生的日志。

  • ​encoding/json​​-​​encoding/xml​​-​​text/template​​:

  • ​encoding/json​​:读取并解码和写入并编码 JSON 数据。

  • ​encoding/xml​​:简单的 XML1.0 解析器。

  • ​text/template​​:生成像 HTML 一样的数据与文本混合的数据驱动模板。

  • ​net​​-​​net/http​​:

  • ​net​​:网络数据的根本操作。

  • ​http​​:提供了一个可扩展的 HTTP 效劳器和根底客户端,解析 HTTP 恳求和回复。

  • ​runtime​​:Go 程序运转时的交互操作,例如渣滓回收和协程创立。

  • ​reflect​​:完成经过程序运转时反射,让程序操作恣意类型的变量。

这里仅仅罗列了一局部规范库,更全面的规范库列表大家能够直接看官网。

那么问题来了,这么多库从何下手呢?

我这里做一个简单的分类,由于程度有限,只能做一些简单的梳理,然后大家能够分离本人的实践状况来做选择。

有些库触及到十分专业的学问,投入产出比可能会比拟低。比方 ​​archive​​、​​compress​​ 以及 ​​crypto​​,触及到紧缩算法以及加密算法的学问。

有些库属于工具类,比方 ​​bufio​​、​​bytes​​、​​strings​​、​​path​​、​​strconv​​ 等,这些库不触及范畴学问,阅读起来比拟容易。

有些库属于与操作系统打交道的,比方 ​​os​​,​​net​​、​​sync​​ 等,学习这些库需求对操作系统有明白的认识。

​net​​ 下的很多子包与网络协议相关,比方 ​​net/http​​,触及 ​​http​​ 报文的解析,需求对网络协议比拟理解。

假如想要深化理解言语的底层原理,则需求阅读 ​​runtime​​ 库。

要想快速入门,并且理解言语的设计理念,倡议阅读 ​​io​​ 以及 ​​fmt​​ 库,阅读后会对接口的设计了解更深。

我曾经看了一些源码,固然过程痛苦,但的确十分有用。前期可能了解起来比拟艰难,用的时间长一些,但构成固定套路之后,会越来越熟习,用的时间也会更少,了解也会更深入。

超清原画 完整无密 包括所有视频课件以及源码 点击下崽:https://www.zxit666.com/2576/