我們可以看到 gorilla/websocket中的examples中有一個聊天室的demo。
鶴慶網站制作公司哪家好,找創新互聯公司!從網頁設計、網站建設、微信開發、APP開發、響應式網站設計等網站項目制作,到程序開發,運營維護。創新互聯公司成立與2013年到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯公司。
我們進入該項目可以看到里面有這樣的一些內容
按照官方的運行方式來運行這個項目
在瀏覽器中打開8080端口,可以看到該項目可以被成功運行了。
就是這樣一個簡單的demo。
然后我們去看一下它的具體實現。
在這個項目中首先定義了一個hub的結構體:
這個結構體中,clients代表所有已經注冊的用戶,broadcast管道會存儲客戶端發送來的信息。 register是一個*Client類型的管道,用于存儲新注冊的用戶,unregister管道反之。
我們打開main.go,main函數的源碼為:
在這里首先會新開一個goroutine,去跑hub的run方法,run方法中一個死循環,不停地去輪詢hub中的內容
如果取到了新用戶,就加入到clients中,如果取到了信息,就循環所有的client,將信息寫到client.send中。
我們看到在請求路徑為根的時候,它會請求一個函數,而這個函數就是將home.html發送到客戶端。
而在請求路徑為“/ws”的時候,他會執行一個serveWS的函數。
每當一個新的用戶進來之后,首先將連接升級為長連接,然后將當前的client寫到register中,由hub.run函數去做處理。然后開啟兩個goroutine,一個去讀client中發送來的數據,一個將數據寫入到所有的client中,去發送給用戶。
這就是整個聊天室的實現原理。
1、服務器編程:以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日志、數據打包、虛擬機處理、文件系統等。
2、分布式系統、數據庫代理器、中間件:例如Etcd。
3、網絡編程:這一塊目前應用最廣,包括Web應用、API應用、下載應用,而且Go內置的net/http包基本上把我們平常用到的網絡功能都實現了。
4、開發云平臺:目前國外很多云平臺在采用Go開發,我們所熟知的七牛云、華為云等等都有使用Go進行開發并且開源的成型的產品。
5、區塊鏈:目前有一種說法,技術從業人員把Go語言稱作為區塊鏈行業的開發語言。如果大家學習區塊鏈技術的話,就會發現現在有很多很多的區塊鏈的系統和應用都是采用Go進行開發的,比如ehtereum是目前知名度最大的公鏈,再比如fabric是目前最知名的聯盟鏈,兩者都有go語言的版本,且go-ehtereum還是以太坊官方推薦的版本。
自1.0版發布以來,go語言引起了眾多開發者的關注,并得到了廣泛的應用。go語言簡單、高效、并發的特點吸引了許多傳統的語言開發人員,其數量也在不斷增加。
使用 Go 語言開發的開源項目非常多。早期的 Go 語言開源項目只是通過 Go 語言與傳統項目進行C語言庫綁定實現,例如 Qt、Sqlite 等。
后期的很多項目都使用 Go 語言進行重新原生實現,這個過程相對于其他語言要簡單一些,這也促成了大量使用 Go 語言原生開發項目的出現。
本文介紹一些Go語言的基礎語法。
先來看一個簡單的go語言代碼:
go語言的注釋方法:
代碼執行結果:
下面來進一步介紹go的基礎語法。
go語言中格式化輸出可以使用 fmt 和 log 這兩個標準庫,
常用方法:
示例代碼:
執行結果:
更多格式化方法可以訪問中的fmt包。
log包實現了簡單的日志服務,也提供了一些格式化輸出的方法。
執行結果:
下面來介紹一下go的數據類型
下表列出了go語言的數據類型:
int、float、bool、string、數組和struct屬于值類型,這些類型的變量直接指向存在內存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。
常量是在程序編譯時就確定下來的值,程序運行時無法改變。
執行結果:
執行結果:
Go 語言的運算符主要包括算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符以及指針相關運算符。
算術運算符:
關系運算符:
邏輯運算符:
位運算符:
賦值運算符:
指針相關運算符:
下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯用,這里不做介紹。
if語法格式如下:
if ... else :
else if:
示例代碼:
語法格式:
另外,添加 fallthrough 會強制執行后面的 case 語句,不管下一條case語句是否為true。
示例代碼:
執行結果:
下面介紹幾種循環語句:
執行結果:
執行結果:
也可以通過標記退出循環:
--THE END--
在Go語言中,時間包提供了確定和查看時間的函數。 Go語言中的Time.Add()函數用于添加規定的時間和持續時間。此外,此函數在時間包下定義。在這里,您需要導入“time”包才能使用這些函數。
用法:
在此,“t”是規定的時間,“d”是要添加到規定時間的持續時間。
返回值: 它返回將指定的t和d相加的結果。
例:
輸出:
此處,返回的輸出采用上述UTC格式。
當客戶端在 發出POST請求時/albums,您希望將請求正文中描述的專輯添加到現有專輯數據中。
為此,您將編寫以下內容:
1、編寫代碼
a.添加代碼以將專輯數據添加到專輯列表。
在此代碼中:
1)用于Context.BindJSON 將請求正文綁定到newAlbum。
2) album將從 JSON 初始化的結構附加到albums 切片。
3)向響應添加201狀態代碼,以及表示您添加的專輯的 JSON。
b.更改您的main函數,使其包含該router.POST函數,如下所示。
在此代碼中:
1)將路徑中的POST方法與 /albumspostAlbums函數相關聯。
使用 Gin,您可以將處理程序與 HTTP 方法和路徑組合相關聯。這樣,您可以根據客戶端使用的方法將發送到單個路徑的請求單獨路由。
a.如果服務器從上一節開始仍在運行,請停止它。
b.從包含 main.go 的目錄中的命令行,運行代碼。
c.從不同的命令行窗口,用于curl向正在運行的 Web 服務發出請求。
該命令應顯示添加專輯的標題和 JSON。
d.與上一節一樣,使用curl檢索完整的專輯列表,您可以使用它來確認添加了新專輯。
該命令應顯示專輯列表。
當客戶端向 發出請求時GET /albums/[id],您希望返回 ID 與id路徑參數匹配的專輯。
為此,您將:
a.在您在上一節中添加的函數下方postAlbums,粘貼以下代碼以檢索特定專輯。
此getAlbumByID函數將提取請求路徑中的 ID,然后找到匹配的專輯。
在此代碼中:
(1)Context.Param用于從 URL 中檢索id路徑參數。當您將此處理程序映射到路徑時,您將在路徑中包含參數的占位符。
(2)循環album切片中的結構,尋找其ID 字段值與id參數值匹配的結構。如果找到,則將該album結構序列化為 JSON,并將其作為帶有200 OK HTTP 代碼的響應返回。
如上所述,實際使用中的服務可能會使用數據庫查詢來執行此查找。
(3)如果找不到專輯,則返回 HTTP 404錯誤。
b.最后,更改您的main,使其包含對router.GET的新調用,路徑現在為/albums/:id ,如以下示例所示。
在此代碼中:
(1)將/albums/:id路徑與getAlbumByID功能相關聯。在 Gin 中,路徑中項目前面的冒號表示該項目是路徑參數。
a.如果服務器從上一節開始仍在運行,請停止它。
b.在包含 main.go 的目錄中的命令行中,運行代碼以啟動服務器。
c.從不同的命令行窗口,用于curl向正在運行的 Web 服務發出請求。
該命令應顯示您使用其 ID 的專輯的 JSON。如果找不到專輯,您將收到帶有錯誤消息的 JSON。
恭喜!您剛剛使用 Go 和 Gin 編寫了一個簡單的 RESTful Web 服務。
本節包含您使用本教程構建的應用程序的代碼。
在Go語言的代碼中,您需要引入官方的SDK庫 aliyun/serverless/fc-runtime-go-sdk/fc,并實現handler函數和main函數。 示例如下:
傳入的event參數是一個包含key屬性的JSON字符串,示例如下。
具體的示例解析如下:
有效的Event Handler簽名如下:
其中,InputType和OutputType與encoding/json標準庫兼容。
Event Handler的使用需遵循以下規則:
事件函數的Handler示例代碼:
文章題目:go語言代碼示例 go程序語言
當前地址:http://vcdvsql.cn/article2/hhpiic.html
成都網站建設公司_創新互聯,為您提供動態網站、網站維護、域名注冊、標簽優化、建站公司、定制開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯