En este post te mostraré a leer banderas, flags o argumentos de la línea de comandos usando el lenguaje de programación Go también conocido como Golang.

Cuando usamos programas podemos pasarles ciertas opciones, banderas o argumentos para su funcionamiento. Por ejemplo:

enviar_correo --destinatario=ejemplo@ejemplo.com --asunto=Hola

Te enseñaré a hacer eso pero con Go usando flag.

Leyendo argumentos de la línea de comandos con Go

Para leer opciones que se pueden pasar al programa podemos usar a flag. En este caso voy a usar flag.String que leerá un argumento como cadena, aunque también existe flag.Bool, flag.Int, etcétera.

Esta función devolverá un apuntador a cadena y después podemos hacer la conversión. Los argumentos al llamarla son, en orden: nombre de la bandera, valor por defecto y descripción.

Ejemplo

Aquí un ejemplo simple que lee el puerto en donde el servidor escuchará:

package main

import (
	"flag"
	"fmt"
)

const PuertoPorDefecto = ":8000"

func main() {
	puerto := flag.String("puerto", PuertoPorDefecto, "Puerto de escucha del servidor")
	flag.Parse()
	// Convertir el apuntador a string
	puertoCadena := *puerto
	// Imprimirlo
	fmt.Println("El puerto es ")
	fmt.Println(puertoCadena)
	// Esperar que el usuario presione Enter
	fmt.Scanln()
}

Nota: una vez que hayas definido tus banderas, invoca a flag.Parse.

Así que el modo de invocar a este programa una vez compilado sería (suponiendo que es leer.exe):

leer.exe --puerto=:8181

Aquí tienes algunas pruebas:

Leer argumentos de línea de comandos con Go y flag

Si te fijas, debemos indicar el valor por defecto en caso de que el usuario no lo proporcione. Además, la descripción sirve para cuando el usuario indica una opción errónea (digamos que es la ayuda):

Bandera no interpretada con Go y flag

Así es como terminamos este post. También existe otra manera en donde simplemente leemos los argumentos como un arreglo, pero eso lo dejo para otro artículo, ya que me parece que esta opción es más elegante.

Si Go te gusta puedes aprender más por aquí.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto