成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開始讀 Go 源碼了讓我們一步一步征服 Go

開發(fā) 前端
在寫項(xiàng)目的過程中,發(fā)現(xiàn)一個(gè)問題。實(shí)現(xiàn)功能是沒問題的,但不知道自己寫的代碼是不是符合 Go 的風(fēng)格,是不是夠優(yōu)雅。

[[438322]]

學(xué)完 Go 的基礎(chǔ)知識(shí)已經(jīng)有一段時(shí)間了,那么接下來應(yīng)該學(xué)什么呢?有幾個(gè)方向可以考慮,比如說 Web 開發(fā),網(wǎng)絡(luò)編程等。

在寫項(xiàng)目的過程中,發(fā)現(xiàn)一個(gè)問題。實(shí)現(xiàn)功能是沒問題的,但不知道自己寫的代碼是不是符合 Go 的風(fēng)格,是不是夠優(yōu)雅。所以我覺得相比于繼續(xù)學(xué)習(xí)應(yīng)用開發(fā),不如向底層前進(jìn),打好基礎(chǔ),打好寫 Go 代碼的基礎(chǔ)。

所以,我決定開始讀 Go 標(biāo)準(zhǔn)庫(kù)源碼,Go 一共有 150+ 標(biāo)準(zhǔn)庫(kù),想要全部讀完的話不是不可能,但絕對(duì)是一項(xiàng)大工程,希望自己能堅(jiān)持下去。

為什么從 Go 標(biāo)準(zhǔn)庫(kù)的源碼開始讀呢?因?yàn)樽罱部戳艘恍?Go 底層原理的書,說實(shí)話,像 goroutine 調(diào)度,gc 垃圾回收這些內(nèi)容,根本就看不懂。這要是一上來就讀這部分代碼,恐怕直接就放棄 Go 語言學(xué)習(xí)了。

而標(biāo)準(zhǔn)庫(kù)就不一樣了,有一部分代碼根本不涉及底層原理,實(shí)現(xiàn)也相對(duì)簡(jiǎn)單,同時(shí)又能對(duì) Go 的理念加深理解,作為入門再好不過了。然后再由簡(jiǎn)入深,循序漸進(jìn),就像打怪升級(jí)一樣,一步一步征服 Go。

說了這么多,那到底應(yīng)該怎么讀呢?我想到了一些方法:

看官方標(biāo)準(zhǔn)庫(kù)文檔。

看網(wǎng)上其他人的技術(shù)文章。

寫一些例子來練習(xí)如何使用。

如果可以的話,自己實(shí)現(xiàn)標(biāo)準(zhǔn)庫(kù)的功能。

將自己的閱讀心得總結(jié)輸出。

可以通過上面的一種或幾種方法相結(jié)合,然后再不斷閱讀不斷總結(jié),最終找到一個(gè)完全適合自己的方法。

下面是我總結(jié)的一些標(biāo)準(zhǔn)庫(kù)及功能介紹:

  • archive/tar 和 /zip-compress:壓縮(解壓縮)文件功能。
  • fmt-io-bufio-path/filepath-flag:
  • fmt:提供格式化輸入輸出功能。
  • io:提供基本輸入輸出功能,大多數(shù)是圍繞系統(tǒng)功能的封裝。
  • bufio:緩沖輸入輸出功能的封裝。
  • path/filepath:用來操作在當(dāng)前系統(tǒng)中的目標(biāo)文件名路徑。
  • flag:提供對(duì)命令行參數(shù)的操作。
  • strings-strconv-unicode-regexp-bytes:
  • strings:提供對(duì)字符串的操作。
  • strconv:提供將字符串轉(zhuǎn)換為基礎(chǔ)類型的功能。
  • unicode:為 unicode 型的字符串提供特殊的功能。
  • regexp:正則表達(dá)式功能。
  • bytes:提供對(duì)字符型分片的操作。
  • index/suffixarray:子字符串快速查詢。
  • math-math/cmath-math/big-math/rand-sort:
  • math:基本的數(shù)學(xué)函數(shù)。
  • math/cmath:對(duì)復(fù)數(shù)的操作。
  • math/rand:偽隨機(jī)數(shù)生成。
  • sort:為數(shù)組排序和自定義集合。
  • math/big:大數(shù)的實(shí)現(xiàn)和計(jì)算。
  • container-/list-/ring-/heap:
  • list:雙鏈表。
  • ring:環(huán)形鏈表。
  • heap:堆。
  • compress/bzip2-/flate-/gzip-/lzw-zlib:
  • compress/bzip2:實(shí)現(xiàn) bzip2 的解壓。
  • flate:實(shí)現(xiàn) deflate 的數(shù)據(jù)壓縮格式,如 RFC 1951 所述。
  • gzip:實(shí)現(xiàn) gzip 壓縮文件的讀寫。
  • lzw:Lempel Ziv Welch 壓縮數(shù)據(jù)格式實(shí)現(xiàn)。
  • zlib:實(shí)現(xiàn) zlib 數(shù)據(jù)壓縮格式的讀寫。
  • context:用來簡(jiǎn)化對(duì)于處理單個(gè)請(qǐng)求的多個(gè) goroutine 之間與請(qǐng)求域的數(shù)據(jù)、取消信號(hào)、截止時(shí)間等相關(guān)操作。
  • crypto-crypto/md5-crypto/sha1:
  • crypto:常用密碼常數(shù)的集合。
  • crypto/md5:MD5 加密。
  • crypto/sha1:SHA1 加密。
  • errors:實(shí)現(xiàn)操作出錯(cuò)的方法。
  • expvar:為公共變量提供標(biāo)準(zhǔn)化的接口。
  • hash:所有散列函數(shù)實(shí)現(xiàn)的通用接口。
  • html:HTML 文本轉(zhuǎn)碼轉(zhuǎn)義功能。
  • sort:提供用于對(duì)切片和用戶定義的集合進(jìn)行排序的原始函數(shù)。
  • unsafe:包含了一些打破 Go 語言「類型安全」的命令,一般程序不會(huì)使用,可用在 C/C++ 程序的調(diào)用中。
  • syscall-os-os/exec:
  • syscall:提供了操作系統(tǒng)底層調(diào)用的基本接口。
  • os:提供給我們一個(gè)平臺(tái)無關(guān)性的操作系統(tǒng)功能接口,采用類 Unix 設(shè)計(jì),隱藏了不同操作系統(tǒng)間差異,讓不同的文件系統(tǒng)和操作系統(tǒng)對(duì)象表現(xiàn)一致。
  • os/exec:提供了運(yùn)行外部操作系統(tǒng)命令和程序的方式。
  • time-log:
  • time:日期和時(shí)間的基本操作。
  • log:記錄程序運(yùn)行時(shí)產(chǎn)生的日志。
  • encoding/json-encoding/xml-text/template:
  • encoding/json:讀取并解碼和寫入并編碼 JSON 數(shù)據(jù)。
  • encoding/xml:簡(jiǎn)單的 XML1.0 解析器。
  • text/template:生成像 HTML 一樣的數(shù)據(jù)與文本混合的數(shù)據(jù)驅(qū)動(dòng)模板。
  • net-net/http:
  • net:網(wǎng)絡(luò)數(shù)據(jù)的基本操作。
  • http:提供了一個(gè)可擴(kuò)展的 HTTP 服務(wù)器和基礎(chǔ)客戶端,解析 HTTP 請(qǐng)求和回復(fù)。
  • runtime:Go 程序運(yùn)行時(shí)的交互操作,例如垃圾回收和協(xié)程創(chuàng)建。
  • reflect:實(shí)現(xiàn)通過程序運(yùn)行時(shí)反射,讓程序操作任意類型的變量。

這里僅僅列舉了一部分標(biāo)準(zhǔn)庫(kù),更全面的標(biāo)準(zhǔn)庫(kù)列表大家可以直接看官網(wǎng)。

那么問題來了,這么多庫(kù)從何下手呢?

我這里做一個(gè)簡(jiǎn)單的分類,由于水平有限,只能做一些簡(jiǎn)單的梳理,然后大家可以結(jié)合自己的實(shí)際情況來做選擇。

有些庫(kù)涉及到非常專業(yè)的知識(shí),投入產(chǎn)出比可能會(huì)比較低。比如 archive、compress 以及 crypto,涉及到壓縮算法以及加密算法的知識(shí)。

有些庫(kù)屬于工具類,比如 bufio、bytes、strings、path、strconv 等,這些庫(kù)不涉及領(lǐng)域知識(shí),閱讀起來比較容易。

有些庫(kù)屬于與操作系統(tǒng)打交道的,比如 os,net、sync 等,學(xué)習(xí)這些庫(kù)需要對(duì)操作系統(tǒng)有明確的認(rèn)識(shí)。

net 下的很多子包與網(wǎng)絡(luò)協(xié)議相關(guān),比如 net/http,涉及 http 報(bào)文的解析,需要對(duì)網(wǎng)絡(luò)協(xié)議比較了解。

如果想要深入了解語言的底層原理,則需要閱讀 runtime 庫(kù)。

要想快速入門,并且了解語言的設(shè)計(jì)理念,建議閱讀 io 以及 fmt 庫(kù),閱讀后會(huì)對(duì)接口的設(shè)計(jì)理解更深。

我已經(jīng)看了一些源碼,雖然過程痛苦,但確實(shí)非常有用。前期可能理解起來比較困難,用的時(shí)間長(zhǎng)一些,但形成固定套路之后,會(huì)越來越熟悉,用的時(shí)間也會(huì)更少,理解也會(huì)更深刻。

 

責(zé)任編輯:姜華 來源: AlwaysBeta
相關(guān)推薦

2023-11-26 17:49:00

模型數(shù)據(jù)

2022-08-29 15:19:09

CSS煙花動(dòng)畫

2009-07-06 19:29:37

云計(jì)算私有云服務(wù)器虛擬化

2011-06-07 16:03:48

匿名SQL Server

2018-03-07 15:24:41

PythonMySQL

2013-03-18 16:09:27

JavaEEOpenfire

2009-12-18 16:27:43

Cisco路由器配置

2012-03-22 10:33:33

思杰XenDesktop

2022-09-30 15:37:19

Web網(wǎng)站服務(wù)器

2017-09-28 09:40:36

圖像分類準(zhǔn)確率

2023-09-05 07:52:43

2009-12-17 08:57:28

Windows 7磁盤分區(qū)

2017-08-24 08:31:41

2024-07-22 11:43:28

LVMPnetLab網(wǎng)絡(luò)

2019-11-04 10:06:19

MySQL索引

2010-07-12 17:10:23

Android應(yīng)用程序

2017-11-29 11:14:52

離線緩存URL協(xié)議緩存

2020-10-28 15:03:25

C+代碼開發(fā)

2020-02-26 08:00:02

14點(diǎn)遭遇真兇

2017-07-15 21:10:58

CTOCEO技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久久久亚洲欧洲 | 99视频免费播放 | 国产男女猛烈无遮掩视频免费网站 | 欧美一区二区在线观看 | 福利视频网站 | 国产精品久久久久久久久久妇女 | 亚洲视频免费在线观看 | 国产高清视频在线观看播放 | 亚州国产 | 男人的天堂久久 | 在线观看成人精品 | 亚洲一级视频在线 | 国产乱码精品一区二区三区忘忧草 | 亚洲激情在线观看 | 婷婷久久网 | 日韩高清一区二区 | 日本三级电影在线免费观看 | 999久久久久久久 | 亚洲综合在线网 | 91精品久久久久久久久 | 亚洲国产高清高潮精品美女 | 99久久夜色精品国产亚洲96 | 欧美亚洲视频在线观看 | 久久精品二区 | 欧美成人一区二区 | 亚洲高清成人在线 | 日日夜夜天天 | 国产丝袜一区二区三区免费视频 | 亚洲成人一二区 | 久久精品国产一区 | 91伊人网 | 国产欧美久久一区二区三区 | 成人在线国产 | 国产成人精品午夜视频免费 | 国产成人精品一区二区 | 日韩在线观看中文字幕 | 日韩在线一区二区三区 | 国产激情视频在线免费观看 | 亚洲一区欧美一区 | 午夜精品久久久久久 | 色伊人 |