成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語言解析參數(shù),go命令行參數(shù)

如何在Go語言中使用flag包對(duì)命令行進(jìn)行參數(shù)解析

flag 是Go 標(biāo)準(zhǔn)庫提供的解析命令行參數(shù)的包。

站在用戶的角度思考問題,與客戶深入溝通,找到孟州網(wǎng)站設(shè)計(jì)與孟州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋孟州地區(qū)。

使用方式:

flag.Type(name, defValue, usage)

其中Type為String, Int, Bool等;并返回一個(gè)相應(yīng)類型的指針。

flag.TypeVar(flagvar, name, defValue, usage)

將flag綁定到一個(gè)變量上。

golang net/http包 http請(qǐng)求的字節(jié)碼讀取與解析。

先配置Header最長讀取時(shí)間、req最長讀取時(shí)間、req最大讀取長度默認(rèn)6M。

RFC7230禁止\r\n參數(shù),Url中只允許包含英文字母(a-zA-Z)、數(shù)字(0-9)、-_.~4個(gè)特殊字符以及所有保留字符。但go net/http包放寬了這個(gè)要求。

先構(gòu)建newTextprotoReader,由于緩沖區(qū)是對(duì)象復(fù)用的,用完后要defer put。共完以以下解析任務(wù):

TextprotoReader數(shù)據(jù)結(jié)構(gòu),將字節(jié)碼Reader轉(zhuǎn)成文本Reader。

第一步,從第一行解析出method uri prototype。

第二步解析URL。url.URL數(shù)據(jù)結(jié)構(gòu):

解析Scheme,協(xié)議前綴(小寫)。有查詢參數(shù)?,則配置url.ForceQuery url.RawQuery。有認(rèn)證信息///...//,則解析url.User url.Host。最后配置url.Path和url.RawPath,如果Path==RawPath,則RawPath=""。

第三步解析MIMEHeader。

第四步readTransfer。重新配置如下參數(shù):RequestMethod ProtoMajor ProtoMinor Header Trailer ContentLength Close。對(duì)于Body,如果encodings支持chunked,讀取流用chunkedReader包裹。默認(rèn)情況用LimitedReader,無body賦空的struct{}。

以下情況返回非空err,示得到正確的請(qǐng)求:

最后配置req.ctx req.RemoteAddr req.TLS body.doEarlyClose = true。

構(gòu)建Response:

其中closeNotifyCh必須在構(gòu)建時(shí)初始化,沒有content所以先置contentLength為-1。

配置w.cw并被w.w包裹。w.cw緩沖默認(rèn)大小2M。

獲取Request可能出現(xiàn)如下錯(cuò)誤:

先上響應(yīng)數(shù)據(jù)結(jié)構(gòu):

response字段可以分類為:大對(duì)象、緩沖、KV對(duì)或bool型的狀態(tài)參數(shù)。

大對(duì)象有:

狀態(tài)字段:

chunkWriter數(shù)據(jù)結(jié)構(gòu):

chunkWriter包裹了Response,功能之一是完成Header設(shè)置,包括Content-Type Content-Length chunk-header。bufio.Writer是chunkWriter是緩沖包裹。

handler將響應(yīng)寫入到response.w。

調(diào)用w.w.Flush()將w寫入到cw,注意到Flush()操作,如果未刷空緩存并報(bào)錯(cuò),觸發(fā)拷貝操作。報(bào)錯(cuò)不會(huì)退回已寫出的數(shù)據(jù)。

進(jìn)而調(diào)用cw.Write(),根據(jù)cw.chunking參數(shù)。

putBufioWriter(w.w)清空resp.w緩沖,如果池化放回sync.pool。

根據(jù)chunkWriter的定義,w.cw.close()負(fù)責(zé)cw的結(jié)束工作:寫入換行符和resp.trailers數(shù)據(jù)。

最后刷新TCP緩沖w.conn.bufw.Flush(),完成響應(yīng)包發(fā)送。并正確關(guān)閉request。

Golang 網(wǎng)絡(luò)編程絲綢之路 - TCP/UDP 地址解析

TL;DR 在使用 Golang 編寫 TCP/UDP socket 的時(shí)候,第一步做的就是地址解析。

該函數(shù)返回的地址包含的信息如下:

TCPAddr 里, IP 既可以是 IPv4 地址,也可以是 IPv6 地址。 Port 就是端口了。 Zone 是 IPv6 本地地址所在的區(qū)域。

從返回結(jié)果看該函數(shù)的參數(shù), network 指 address 的網(wǎng)絡(luò)類型; address 指要解析的地址,會(huì)從中解析出我們想要的 IP , Port 和 Zone 。

從源碼中可以看出,參數(shù) network 只能是如下四個(gè)值,否則會(huì)得到一個(gè)錯(cuò)誤。

解析過程跟 ResolveTCPAddr 的一樣,不過得到的是 *UDPAddr 。

UDPAddr 包含的信息如下:

標(biāo)題名稱:go語言解析參數(shù),go命令行參數(shù)
標(biāo)題URL:http://jinyejixie.com/article36/dssdgsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、建站公司、做網(wǎng)站、關(guān)鍵詞優(yōu)化、網(wǎng)站維護(hù)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)
公安县| 栾城县| 荣昌县| 嘉祥县| 乌兰县| 黄石市| 道孚县| 青海省| 铜山县| 康平县| 固始县| 上饶县| 新化县| 遂平县| 铜山县| 通辽市| 景宁| 大方县| 永新县| 黄石市| 保定市| 秦安县| 仪征市| 西城区| 泸溪县| 西青区| 临沧市| 明水县| 西畴县| 玛多县| 迁安市| 大连市| 昌图县| 青田县| 独山县| 历史| 嵩明县| 北京市| 固原市| 维西| 吕梁市|