中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

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

如何在Go語言中使用flag包對命令行進(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請求的字節(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ū)是對象復(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。對于Body,如果encodings支持chunked,讀取流用chunkedReader包裹。默認(rèn)情況用LimitedReader,無body賦空的struct{}。

以下情況返回非空err,示得到正確的請求:

最后配置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字段可以分類為:大對象、緩沖、KV對或bool型的狀態(tài)參數(shù)。

大對象有:

狀態(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ò)不會退回已寫出的數(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 指要解析的地址,會從中解析出我們想要的 IP , Port 和 Zone 。

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

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

UDPAddr 包含的信息如下:

標(biāo)題名稱:go語言解析參數(shù),go命令行參數(shù)
標(biāo)題URL:http://www.rwnh.cn/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)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎ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ì)
鄱阳县| 广安市| 托克托县| 康定县| 视频| 保德县| 长武县| 石柱| 红桥区| 泾阳县| 平山县| 武邑县| 页游| 福贡县| 田阳县| 金昌市| 新化县| 琼海市| 明光市| 同心县| 嵊泗县| 崇信县| 三江| 关岭| 深泽县| 建宁县| 威宁| 南雄市| 江安县| 淳安县| 尼玛县| 沐川县| 望奎县| 海安县| 乐都县| 绥芬河市| 金门县| 磐石市| 定襄县| 鸡泽县| 玉山县|