02. Go web: ¿cómo hacer peticiones HTTP con Golang?

Publicado por

Es hora de comenzar a usar los paquetes web que vienen incluidos con Golang. En esta entrada crearemos un pequeño servidor que atenderá peticiones HTTP. Sin más que agregar, comencemos.

Creando un servidor

Lo primero que haremos es crear un archivo con el nombre ‘codingornot.go’ (nombre opcional), que será nuestro servidor en cuestión. En seguida, importamos los paquetes necesarios para nuestro programa, como esta será una versión de prueba con la única finalidad de familiarizarnos un poco con las peticiones y respuestas HTTP, solamente necesitaremos el paquete de salidas con formato (fmt) y un paquete para las peticiones HTTP (net/http):

import (
  "fmt"
  "net/http"
)

En seguida creamos una función que será la encargada de manejar las peticiones. En este caso la llamaré manejador() pero tú puedes usar el nombre que creas conveniente:

func manejador(w http.ResponseWriter, r *http.Request){
  fmt.Fprintf(w,"Hola, %s, ¡este es un servidor!", r.URL.Path)
}

Esta función recibe como primer argumento un dato tipo http.ResponseWriter que forma parte del paquete net/http. Este se encarga de construir la respuesta del servidor, es decir, es el que envía los mensajes al cliente HTTP.

El segundo argumento de manejador() es un tipo http.Request, es decir, son las peticiones del cliente HTTP.

Dentro del cuerpo de la función escribimos un mensaje a w (la respuesta para el cliente) por medio de fmt.Fprintf(). En este caso escribimos un saludo junto con la ruta de la solicitud, la cual puede ser consultada con r.URL.Path. La ruta en este caso será:“/codingornot”, si quisieras que solamente apareciera el nombre, puedes crear un slice con el nombre de la ruta a partir del segundo caracter (r.URL.Path[1:] devolvería “codingornot” en lugar de “/codingornot”).

Ahora creamos la función principal (main()) desde la cual haremos el llamado a manejador():

func main(){
  http.HandleFunc("/", manejador)
  http.ListenAndServe(":8080", nil)
}

Primero hacemos llamado a http.HandleFunc() para que el paquete http se encargue de las peticiones hechas a la web raíz (“/”) por medio de nuestra, previamente construida, función manejador().

En seguida, llamamos a la función http.ListenAndServe() para que el programa se mantenga bloqueado escuchando peticiones en el puerto 8080 (“:8080”) hasta que termine su ejecución. El uso del parámetro nil será explicado en entradas posteriores, por el momento dejemos esa parte así.

Programa funcional

El siguiente programa reúne todo lo visto en esta entrada:

package main
import (
  "fmt"
  "net/http"
)

func manejador(w http.ResponseWriter, r *http.Request){
  fmt.Fprintf(w,"Hola, %s, ¡este es el servidor!", r.URL.Path)
}

func main(){
  http.HandleFunc("/", manejador)
  fmt.Println("El servidor se encuentra en ejecución")
  http.ListenAndServe(":8080", nil)
}

Compilamos y ejecutamos el programa:

go build codingornot.go
./codingornot

Para verificar que funciona correctamente, accedemos a la siguiente URL:

http://localhost:8080/codingornot

Se abrirá una página con el siguiente mensaje:

Hola, /codingornot, ¡este es el servidor!

Finalizando…

En la siguiente entrada aprenderemos a servir las páginas wiki que creamos en la entrada anterior usando el paquete net/http. Espero que esta entrada te haya servido, si tienes alguna duda puedes escribirla en los comentarios y te responderé a la brevedad. Hasta la próxima. See ya!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *