《Go语言程序设计》中第8.10节有个聊天室的例子,我们就来跟着完成这个例子。
先来看看主函数:
func main() {
listener, err := net.Listen("tcp", "localhost:8000")
if err != nil {
//log.Fatal()打印错误信息并调用os.Exit(1),终止程序
log.Fatal(err)
}
//广播,发送消息到所有客户端
go broadcaster()
for {
conn, err := listener.Accept()
if err != nil {
log.Println(err)
continue
}
go handleConn(conn)
}
}
下面是broadcaster()相关代码:
//channel的三种类型(只发送、只接受、即发送也接受)
//这里client只发送不接受
//只接受 type client <-chan string
//即发送也接受 type client chan string
type client chan<- string
var (
entering = make(chan client)
leaving = make(chan client)
message = make(chan string)
)
func broadcaster() {
clients := make(map[client]bool)
for {
select {
case msg := <-message:
for cli := range clients {
cli <- msg
}
case cli := <-entering:
clients[cli] = true
case cli := <-leaving:
delet

本文根据《Go语言程序设计》的8.10节,详细讲解如何实现一个聊天室。主函数中,broadcaster监听全局message channel,接收到客户端消息后广播给所有连接。客户端部分,增加了房间切换功能,允许用户在不同房间交谈。后续计划继续完善功能。
最低0.47元/天 解锁文章
2633





