真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言upgrader go語言適合做什么

go語言聊天室實(shí)現(xiàn)(六)創(chuàng)建HTTP連接,并升級為長連接

我們在mian函數(shù)中,首先初始化配置文件,然后新建http連接。

成都創(chuàng)新互聯(lián)專注于石鼓網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供石鼓營銷型網(wǎng)站建設(shè),石鼓網(wǎng)站制作、石鼓網(wǎng)頁設(shè)計、石鼓網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造石鼓網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供石鼓網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

這個連接創(chuàng)建之后,監(jiān)聽服務(wù)器的9999端口。如果url的路徑后綴為 "/ws",就轉(zhuǎn)發(fā)到ws/ws.go中的IndexHandler方法中。

這個方法中首先我們創(chuàng)建一個websocket的Upgrader實(shí)例,然后我們使用Upgrader的upgrade方法來升級一下我們的連接為長連接。

升級完成之后會返回一個*websocket.Conn的連接,我們之后所有的關(guān)于連接的操作,都是基于該conn的。

在該連接完成之后,我們將連接存放到一個名為Client的map中,以便之后管理更為方便。

之后,我們啟動一個goroutine來讀取連接中發(fā)送的信息內(nèi)容,再根據(jù)內(nèi)容進(jìn)行相應(yīng)的操作。

gorilla/websocket使用教程

最近打算為我的網(wǎng)站添加一個服務(wù)器資源監(jiān)視功能,需要服務(wù)端主動向前端推動資源占用數(shù)據(jù)。這時Http則不能達(dá)到要求。所以自然想到采用websocket。以前使用SpringBoot時使用websocket很簡單,只需要將ServerEndpointExporter注入到bean容器并配合相應(yīng)注解即可創(chuàng)建一個websocket服務(wù)。這里要感謝各位前輩的封裝讓我們能盡快實(shí)現(xiàn)相應(yīng)的功能,但本次出于學(xué)習(xí)目并不是公司項(xiàng)目(效率穩(wěn)定性至上)同時使用的開發(fā)語言為Golang,其web開發(fā)生態(tài)也不會像Java那樣豐富,最后選擇了開源實(shí)現(xiàn) gorilla/websocket 項(xiàng)目地址

執(zhí)行 go get github.com/gorilla/websocket 添加依賴

我們知道websocket由http升級而來,首先會發(fā)送附帶Upgrade請求頭的Http請求,所以我們需要在處理Http請求時攔截請求并判斷其是否為websocket升級請求,如果是則調(diào)用 gorilla/websocket 庫相應(yīng)函數(shù)處理升級請求。

首相要創(chuàng)建Upgrader實(shí)例,該實(shí)例用于升級請求

其中 CheckOringin 是一個函數(shù),該函數(shù)用于攔截或放行跨域請求。函數(shù)返回值為 bool 類型,即 true 放行, false 攔截。如果請求不是跨域請求可以不賦值,我這里是跨域請求并且為了方便直接返回 true

此時已經(jīng)成功升級為websocket連接并獲得一個conn實(shí)例,之后的發(fā)送接收操作皆有conn完成其類型為websocket.Conn。

首先向客戶端發(fā)送消息使用 WriteMessage(messageType int, data []byte) ,參數(shù)1為消息類型,參數(shù)2消息內(nèi)容

示例:

接受客戶端消息使用 ReadMessage() 該操作會阻塞線程所以建議運(yùn)行在其他協(xié)程上。該函數(shù)有三個返回值分別是,接收消息類型、接收消息內(nèi)容、發(fā)生的錯誤當(dāng)然正常執(zhí)行時錯誤為 nil。一旦連接關(guān)閉返回值類型為-1可用來終止讀操作。

示例:

同時可以為連接設(shè)置關(guān)閉連接監(jiān)聽,函數(shù)為 SetCloseHandler(h func(code int, text string) error) 函數(shù)接收一個函數(shù)為參數(shù),參數(shù)為nil時有一個默認(rèn)實(shí)現(xiàn),其源碼為:

可以看到作為參數(shù)的函數(shù)的參數(shù)為int和string類型正好和前端的close(long string)對應(yīng)即前端調(diào)用close(long string)關(guān)閉連接后兩個參數(shù)會被發(fā)送給后端并最終被 func(code int, text string) error 所使用。

示例:

則斷開連接時將打印code和text

注意:要想使斷連處理生效必須要有 ReadMessage() 操作否則不會觸發(fā)斷連處理操作。

以上是常用基礎(chǔ)操作點(diǎn)擊 官方API手冊 學(xué)習(xí)更多。

最后:大幻夢森羅萬象狂氣斷罪眼\ (??) /

4.1 Go語言中包(Packages)基礎(chǔ)知識

先看一下目錄結(jié)構(gòu),注意這里的src名稱是必須的,go在設(shè)置了GOPATH后,默認(rèn)會添加src去尋找package,暫未查詢是否有方法不按照src查詢

根據(jù)上面的描述,Go語言中通過包中函數(shù)的名稱來區(qū)分公共函數(shù)和私有函數(shù),我們在main函數(shù)中是無法調(diào)用myPrivateFunc的

此時如果執(zhí)行通過go run方式執(zhí)行,會看到如下的提示信息,這與大部分語言對于包管理方式相關(guān),所以我們通過兩種不同的方法來讓代碼執(zhí)行起來

返回如下,這里面對我們后續(xù)執(zhí)行有影響的兩個參數(shù)GO111MODULE和GOPATH

如果要使用gopath模式引用包,則需要關(guān)閉mod模式

設(shè)置GOPATH為當(dāng)前路徑,即main.go所在的路徑

此時再查看go env時,GOPATH已經(jīng)發(fā)生改變

我們再次嘗試執(zhí)行代碼

可以看到public函數(shù)被調(diào)用

GO語言(二十五):管理依賴項(xiàng)(上)-

當(dāng)您的代碼使用外部包時,這些包(作為模塊分發(fā))成為依賴項(xiàng)。隨著時間的推移,您可能需要升級或更換它們。Go 提供了依賴管理工具,可幫助您在合并外部依賴項(xiàng)時確保 Go 應(yīng)用程序的安全。

本主題介紹如何執(zhí)行任務(wù)以管理您在代碼中承擔(dān)的依賴項(xiàng)。您可以使用 Go 工具執(zhí)行其中的大部分操作。本主題還介紹了如何執(zhí)行其他一些您可能會覺得有用的依賴相關(guān)任務(wù)。

您可以通過 Go 工具獲取和使用有用的包。在 pkg.go.dev 上,您可以搜索您可能覺得有用的包,然后使用go命令將這些包導(dǎo)入您自己的代碼中以調(diào)用它們的功能。

下面列出了最常見的依賴項(xiàng)管理步驟。

在 Go 中,您將依賴項(xiàng)作為包含您導(dǎo)入的包的模塊來管理。此過程由以下機(jī)構(gòu)支持:

您可以搜索pkg.go.dev以查找具有您可能覺得有用的功能的軟件包。

找到要在代碼中使用的包后,在頁面頂部找到包路徑,然后單擊復(fù)制路徑按鈕將路徑復(fù)制到剪貼板。在您自己的代碼中,將路徑粘貼到導(dǎo)入語句中,如下例所示:

在您的代碼導(dǎo)入包后,啟用依賴項(xiàng)跟蹤并獲取包的代碼進(jìn)行編譯。

要跟蹤和管理您添加的依賴項(xiàng),您首先要將代碼放入其自己的模塊中。這會在源代碼樹的根目錄創(chuàng)建一個 go.mod 文件。您添加的依賴項(xiàng)將列在該文件中。

要將您的代碼添加到它自己的模塊中,請使用 go mod init命令。例如,從命令行切換到代碼的根目錄,然后按照以下示例運(yùn)行命令:

該go mod init命令的參數(shù)是您的模塊的模塊路徑。如果可能,模塊路徑應(yīng)該是源代碼的存儲庫位置。

如果一開始您不知道模塊的最終存儲庫位置,請使用安全的替代品。這可能是您擁有的域的名稱或您控制的另一個名稱(例如您的公司名稱),以及來自模塊名稱或源目錄的路徑。

當(dāng)您使用 Go 工具管理依賴項(xiàng)時,這些工具會更新 go.mod 文件,以便它維護(hù)您的依賴項(xiàng)的當(dāng)前列表。

添加依賴項(xiàng)時,Go 工具還會創(chuàng)建一個 go.sum 文件,其中包含您所依賴的模塊的校驗(yàn)和。Go 使用它來驗(yàn)證下載的模塊文件的完整性,特別是對于在您的項(xiàng)目上工作的其他開發(fā)人員。

在代碼中包含存儲庫中的 go.mod 和 go.sum 文件。

當(dāng)您運(yùn)行g(shù)o mod init創(chuàng)建用于跟蹤依賴項(xiàng)的模塊時,您指定一個模塊路徑作為模塊的名稱。模塊路徑成為模塊中包的導(dǎo)入路徑前綴。一定要指定一個不會與其他模塊的模塊路徑?jīng)_突的模塊路徑。

至少,一個模塊路徑只需要表明它的來源,例如公司或作者或所有者名稱。但是路徑也可能更能描述模塊是什么或做什么。

模塊路徑通常采用以下形式:

1、Go 工具可以在其中找到模塊源代碼的存儲庫的位置。

例如,它可能是github.com/ /.

如果您認(rèn)為您可能會發(fā)布模塊供其他人使用,請使用此最佳實(shí)踐。

2、一個你控制的名字。

如果您不使用存儲庫名稱,請務(wù)必選擇一個您確信不會被其他人使用的前綴。一個不錯的選擇是您公司的名稱。避免使用常用術(shù)語,例如widgets、utilities或 app。

Go 保證以下字符串不會在包名稱中使用。

1、test– 您可以將test用作模塊路徑前綴以便代碼用于在另一個模塊中本地測試功能進(jìn)行測試。

使用test作為模塊路徑前綴是測試的一部分。例如,您的測試本身可能會運(yùn)行g(shù)o mod init test,然后以某種特定方式設(shè)置該模塊,以便使用 Go 源代碼分析工具進(jìn)行測試。

2、example– 在某些 Go 文檔中用作模塊路徑前綴,例如在創(chuàng)建模塊以跟蹤依賴關(guān)系的教程中。

請注意,Go 文檔還用于example.com說明示例何時可能是已發(fā)布的模塊。


文章標(biāo)題:go語言upgrader go語言適合做什么
本文URL:http://weahome.cn/article/doicjop.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部