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...