You build a Go chat app by creating an HTTP server that upgrades connections to WebSockets, broadcasting messages to all connected clients via a shared channel. Use the gorilla/websocket library to handle the upgrade and message loop, then run the server on a specific port.
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{}
var clients = make(map[*websocket.Conn]bool)
var broadcast = make(chan string)
func handler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil { return }
defer conn.Close()
clients[conn] = true
for {
_, message, err := conn.ReadMessage()
if err != nil { break }
broadcast <- string(message)
}
}
func broadcaster() {
for {
msg := <-broadcast
for client := range clients {
if err := client.WriteMessage(websocket.TextMessage, []byte(msg)); err != nil {
client.Close()
delete(clients, client)
}
}
}
}
func main() {
go broadcaster()
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}