Biblioteca WebSocket Gorilla para Go (Golang): guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Gorilla WebSocket: uma ferramenta poderosa para tempo real em Go



No desenvolvimento web moderno, a necessidade de troca de dados em tempo real está se tornando cada vez mais relevante. Seja para chats, jogos online, monitoramento de servidores ou cotações de bolsa — WebSocket é o padrão de facto para comunicação bidirecional entre cliente e servidor. Para a linguagem Go (Golang), uma das bibliotecas mais populares e estáveis para trabalhar com WebSocket é o Gorilla WebSocket.



A biblioteca gorilla/websocket faz parte do ecossistema Gorilla Toolkit — um conjunto de pacotes de alta qualidade para desenvolvimento web em Go. Ela fornece um conjunto completo de funções para criar servidores e clientes WebSocket, suporta todos os protocolos principais (RFC 6455) e se destaca pela facilidade de uso.



Principais recursos do Gorilla WebSocket



  • Suporte completo ao protocolo WebSocket — trabalho com frames de texto e binários, fragmentação de mensagens, frames de controle (ping/pong).
  • API conveniente — interface minimalista com as funções ReadMessage e WriteMessage.
  • Suporte a TLS/SSL — conexões WebSocket seguras (wss://).
  • Configuração flexível — possibilidade de definir timeouts, tamanhos de buffer, verificar a origem das requisições.
  • Compatibilidade com HTTP — integra-se facilmente com qualquer servidor HTTP Go (net/http).
  • Trabalho com contextos — suporte a context.Context para cancelamento de operações.


Instalação da biblioteca



Para instalar o Gorilla WebSocket, execute o comando no terminal:



go get github.com/gorilla/websocket


Depois disso, adicione o import no seu arquivo Go:



import "github.com/gorilla/websocket"


Exemplo básico de servidor WebSocket



Vamos considerar um servidor echo simples, que aceita conexões WebSocket e envia de volta as mensagens recebidas.



package main

import ( "log" "net/http"

"github.com/gorilla/websocket")

var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true // Permite todas as origens (para desenvolvimento) },}

func echoHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Print("Upgrade failed:", err) return } defer conn.Close()

for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println("Read error:", err) break } log.Printf("Received: %s", message)

if err := conn.WriteMessage(messageType, message); err != nil { log.Println("Write error:", err) break } }}

func main() { http.HandleFunc("/echo", echoHandler) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil))}


Explicação detalhada do código



  1. Upgrader — é a estrutura que transforma uma requisição HTTP comum em uma conexão WebSocket. No exemplo, permitimos requisições de qualquer origem (campo CheckOrigin). Em produção, é recomendável verificar domínios específicos.
  2. Upgrade — o método principal, que pega o http.ResponseWriter e *http.Request e retorna um *websocket.Conn.
  3. ReadMessage — uma chamada bloqueante que aguarda uma nova mensagem do cliente. Retorna o tipo da mensagem (texto ou dados binários) e os próprios dados.
  4. WriteMessage — envia a mensagem de volta para o cliente. Neste caso, simplesmente retornamos o mesmo que recebemos.


Cliente WebSocket (Gorilla)



A biblioteca também permite

Recommendations