概括
最近這幾天都在看golang編程相關(guān)的東西隶糕,一言難進(jìn)啊站玄!這塊內(nèi)容牽扯到很多知識(shí)枚驻,所以很繁瑣,自己看的也很繞株旷,還是對(duì)看的內(nèi)容做一個(gè)大概總結(jié)吧测秸!
1. binary、bufio灾常、bytes
這三個(gè)包是我在看網(wǎng)絡(luò)編程這塊霎冯,一下子涌入的三個(gè)包,首次遇到直接懵逼了钞瀑,這三是個(gè)啥完全不知道沈撞,好在這兩天看了些資料,先說(shuō)下自己的大概的理解:
-
binary
主要是實(shí)現(xiàn)二進(jìn)制內(nèi)容的(寫(xiě)和讀)雕什,寫(xiě)—— 普通數(shù)據(jù)轉(zhuǎn)二進(jìn)制缠俺;讀 —— 二進(jìn)制轉(zhuǎn)普通數(shù)據(jù)。 -
bufio
主要是做緩沖相關(guān)的操作贷岸,為啥需要它呢壹士?因?yàn)槿绻∨款l繁的寫(xiě)或者讀,這些io操作需要調(diào)用底層資源(硬盤(pán))偿警,所以性能不好躏救;所以會(huì)有先用緩沖做為中介,等到累積到一定程度再去做(io寫(xiě)/io讀) -
bytes
主要是操作byte切片,比如比較盒使、復(fù)制崩掘、克隆、等等少办;當(dāng)然它還提供了一部分buffer的功能
另外一個(gè)令人困惑的地方是苞慢,bytes.Buffer
和 bufio
有什么區(qū)別呢;看起來(lái)都是緩沖英妓;
- bytes.Buffer 它是始終在內(nèi)存中
- bufio 則不會(huì)
2. 緩沖區(qū)
這是這幾天的另外一個(gè)概念挽放,上面的這些包都離不開(kāi)這個(gè)所謂的緩沖區(qū)。
啥是緩沖區(qū)呢蔓纠?
它是介于物理硬件和內(nèi)存之間的中間產(chǎn)物辑畦,大概這個(gè)樣子
生產(chǎn)者 -》緩沖區(qū) -〉 io(硬件)
它有啥作用呢?
- 最重要的贺纲,減少頻繁的io操作;將數(shù)據(jù)累積到一定時(shí)候褪测,批量操作
- 調(diào)節(jié)數(shù)據(jù)傳輸速度猴誊,比如讀和寫(xiě)速度不一樣,緩沖區(qū)可以緩存一些數(shù)據(jù)
另外一點(diǎn)是侮措,它內(nèi)部有一個(gè)指針懈叹,標(biāo)記讀取到哪里了,所以讀了一次后,下次讀就是從新的位置讀起了分扎。
3. dlv調(diào)試時(shí)候澄成,執(zhí)行函數(shù)
需要在前面加call
4. 對(duì)io操作讀時(shí)候有阻塞
比如讀的時(shí)候,如果沒(méi)有數(shù)據(jù)過(guò)來(lái)就會(huì)阻塞了畏吓, 比如net包在 conn.Read的時(shí)候如果沒(méi)有數(shù)據(jù)過(guò)來(lái)墨状,則阻塞了。
5. 一點(diǎn)對(duì)于遇到不了解的包心得菲饼。
- 先去看文檔對(duì)應(yīng)的函數(shù)/方法肾砂,是否能懂;如果能懂ok到此為止宏悦。
- 如果不懂镐确,先搜索這個(gè)包的用法,理解這個(gè)包的主要功能
- 跟著example練習(xí)饼煞,修修改改源葫,然后再看看文檔基本就差不多了
- 練習(xí)時(shí)保證簡(jiǎn)單原則,能闡明基本的內(nèi)容即可砖瞧。
切記: 不要在不了解包的情況下息堂,在原來(lái)的代碼中反復(fù)折騰。
6. 關(guān)于socket過(guò)程的理解
任何語(yǔ)言本質(zhì)上都是對(duì)底層操作系統(tǒng)提供的api的調(diào)用块促;
socket這塊主要有這么幾個(gè)api:
- bind (host + 端口)
- accpet(監(jiān)聽(tīng) - 客戶端連接)
- write(寫(xiě) - 發(fā)數(shù)據(jù))
- read(讀 - 收數(shù)據(jù))
linux下一切都文件储矩,所以都是讀 寫(xiě)
7 . ARP協(xié)議
A - Address
R - Resolve
P - Protocol
地址(Mac)解析協(xié)議 Mac地址解析成ip地址