Go語言之高階篇實現併發聊天功能

2022-07-05 03:57:15 字數 1376 閱讀 5704

1、併發聊天伺服器原理分析

2、併發聊天室

功能: 

示例:

package main

import (

"fmt"

"net"

"strings"

"time"

)type client struct

var onlinemap map[string]client

var messaage = make(chan string)

//新開乙個協程,**訊息,只要有訊息來了,遍歷map, 給map每個成員都傳送此訊息

func manager() }}

func writemsgtoclient(cli client, conn net.conn)

}func makemsg(cli client, msg string) (buf string)

func handleconn(conn net.conn)

//把結構體新增到map

onlinemap[cliaddr] = cli

//新開乙個協程,專門給當前客戶端傳送資訊

go writemsgtoclient(cli, conn)

//messaage

messaage

//提示,我是誰

cli.c

isquit := make(chan bool) //對方是否主動退出

hasdata := make(chan bool) //對方是否有資料傳送

//新建乙個協程,接收使用者傳送過來的資料

go func()

msg := string(buf[:n-1]) //通過windows nc測試,多乙個換行

if len(msg) == 3 && msg == "who"

} else if len(msg) >= 8 && msg[:6] == "rename" else

hasdata

} }() //別忘了()

for }}

func main()

defer listener.close()

//新開乙個協程,**訊息,只要有訊息來了,遍歷map, 給map每個成員都傳送此訊息

go manager()

//主協程,迴圈阻塞等待使用者鏈結

for

go handleconn(conn) //處理使用者鏈結

}}

執行結果:

go語言之高階篇通過if實現型別斷言

1 通過if實現型別斷言 示例 package main import fmt type student struct func main 3 i 0 1 int i 1 hello go string i 2 student student 型別查詢,型別斷言 第乙個返回下標,第二個返回下標對應的...

go語言之高階篇建立goroutine協程

1 goroutine是什麼 goroutine是go並行設計的核心。goroutine說到底其實就是協程,但是它比執行緒更小,十幾個goroutine可能體現在底層就是五六個執行緒,go語言內部幫你實現了這些goroutine之間的記憶體共享。執行goroutine只需極少的棧記憶體 大概是4 5...

go語言之高階篇拷貝檔案案例

1 檔案案例 拷貝檔案 示例 package main import fmt io os func main srcfilename list 1 drcfilename list 1 if srcfilename drcfilename 唯讀方式開啟原始檔 sf,err1 os.open srcf...