Creación de un servidor HTTP
ListenAndServe, HandlerFunc y ServeMux
Creación de un servidor HTTP es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
Paquete net/http
La biblioteca estándar de Go, net/http, proporciona un servidor HTTP/1.1 y HTTP/2 apto para producción sin dependencias externas.
Servidor básico
Registre un controlador con http.HandleFunc y empiece a escuchar con http.ListenAndServe:
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))Interfaz http.Handler
Cualquier tipo que implemente ServeHTTP(ResponseWriter, *Request) es un http.Handler. Úselo para controladores con estado que incorporen una base de datos o configuración.
type App struct{ db *sql.DB }
func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// use a.db
}ServeMux
http.NewServeMux() crea un enrutador aislado. Páselo a http.ListenAndServe para evitar el mux predeterminado global, lo que resulta más seguro en bibliotecas.
mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)Responder con códigos de estado
Escriba el código de estado con w.WriteHeader(code) antes de escribir el cuerpo. Si solo llama a w.Write, el estado predeterminado es 200.
w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))Escribir respuestas JSON
Establezca Content-Type antes de escribir el cuerpo y, a continuación, codifique con json.Encoder:
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)Leer la solicitud
Acceda al método, la URL, las cabeceras, los parámetros de consulta y el cuerpo mediante la estructura *Request.
r.Method // "GET", "POST", ...
r.URL.Path // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")Analizar el cuerpo de una solicitud JSON
Decodifique el cuerpo de la solicitud con json.Decoder. Limite el tamaño del cuerpo con http.MaxBytesReader para evitar el agotamiento de memoria.
r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)Configuración del servidor
Configure tiempos de espera con un http.Server personalizado para evitar ataques de clientes lentos:
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
srv.ListenAndServe()HTTPS
Use srv.ListenAndServeTLS(certFile, keyFile) para ofrecer HTTPS. Los certificados pueden ser autofirmados (en desarrollo) o proceder de Let's Encrypt (en producción mediante golang.org/x/crypto/acme/autocert).
Composición de controladores
Envuelva los controladores para añadir aspectos transversales (registro, autenticación y recuperación) sin modificar la lógica de negocio. Devuelva el siguiente controlador después de modificarlo.
Comprobación rápida
¿Por qué debería establecer ReadTimeout y WriteTimeout en un http.Server?
Resumen: creación de un servidor HTTP
Puntos clave:
- HandleFunc + ListenAndServe para servidores sencillos
- http.Server personalizado con tiempos de espera para producción
- ServeMux para un enrutamiento aislado
- json.NewEncoder(w) para respuestas JSON
Preguntas frecuentes
¿La lección «Creación de un servidor HTTP» es gratis?
Sí — el texto completo de «Creación de un servidor HTTP» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Creación de un servidor HTTP»?
ListenAndServe, HandlerFunc y ServeMux Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Creación de un servidor HTTP»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Creación de un servidor HTTP
- Enrutamiento y parámetros de ruta
- Patrón de middleware
- Apagado ordenado