bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

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

go語言聊天室實現(六)創建HTTP連接,并升級為長連接

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

成都創新互聯專注于石鼓網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供石鼓營銷型網站建設,石鼓網站制作、石鼓網頁設計、石鼓網站官網定制、小程序制作服務,打造石鼓網絡公司原創品牌,更為您提供石鼓網站排名全網營銷落地服務。

這個連接創建之后,監聽服務器的9999端口。如果url的路徑后綴為 "/ws",就轉發到ws/ws.go中的IndexHandler方法中。

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

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

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

之后,我們啟動一個goroutine來讀取連接中發送的信息內容,再根據內容進行相應的操作。

gorilla/websocket使用教程

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

執行 go get github.com/gorilla/websocket 添加依賴

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

首相要創建Upgrader實例,該實例用于升級請求

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

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

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

示例:

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

示例:

同時可以為連接設置關閉連接監聽,函數為 SetCloseHandler(h func(code int, text string) error) 函數接收一個函數為參數,參數為nil時有一個默認實現,其源碼為:

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

示例:

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

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

以上是常用基礎操作點擊 官方API手冊 學習更多。

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

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

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

根據上面的描述,Go語言中通過包中函數的名稱來區分公共函數和私有函數,我們在main函數中是無法調用myPrivateFunc的

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

返回如下,這里面對我們后續執行有影響的兩個參數GO111MODULE和GOPATH

如果要使用gopath模式引用包,則需要關閉mod模式

設置GOPATH為當前路徑,即main.go所在的路徑

此時再查看go env時,GOPATH已經發生改變

我們再次嘗試執行代碼

可以看到public函數被調用

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

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

本主題介紹如何執行任務以管理您在代碼中承擔的依賴項。您可以使用 Go 工具執行其中的大部分操作。本主題還介紹了如何執行其他一些您可能會覺得有用的依賴相關任務。

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

下面列出了最常見的依賴項管理步驟。

在 Go 中,您將依賴項作為包含您導入的包的模塊來管理。此過程由以下機構支持:

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

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

在您的代碼導入包后,啟用依賴項跟蹤并獲取包的代碼進行編譯。

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

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

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

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

當您使用 Go 工具管理依賴項時,這些工具會更新 go.mod 文件,以便它維護您的依賴項的當前列表。

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

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

當您運行go mod init創建用于跟蹤依賴項的模塊時,您指定一個模塊路徑作為模塊的名稱。模塊路徑成為模塊中包的導入路徑前綴。一定要指定一個不會與其他模塊的模塊路徑沖突的模塊路徑。

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

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

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

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

如果您認為您可能會發布模塊供其他人使用,請使用此最佳實踐。

2、一個你控制的名字。

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

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

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

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

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

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

分享文章:go語言upgrader go語言適合做什么
網站鏈接:http://vcdvsql.cn/article8/doicjop.html

成都網站建設公司_創新互聯,為您提供Google用戶體驗電子商務網站制作網站導航軟件開發

廣告

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

網站優化排名