Hola mundo en Go

1

Programación Básica con Go: Variables, Funciones y GoModules

2

Introducción al lenguaje de programación Go y sus beneficios

3

Instalación de Go en Linux paso a paso

4

Instalación de Go en macOS con Brew y métodos alternativos

5

Instalación y Configuración de Go en Windows

6

Programación en Go: Primer Hola Mundo paso a paso

Variables, funciones y documentación

7

Variables, Constantes y Cero Valores en Go

8

Operadores Aritméticos en Go: Suma, Resta, Multiplicación y División

9

Tipos de Datos Primitivos en Go: Enteros, Flotantes y Booleanos

10

Funciones clave del paquete fmt en Go

11

Funciones y Retornos en Go: Uso y Mejores Prácticas

12

Lectura de Documentación en Go y Librerías de Terceros

Estructuras de control de flujo y condicionales

13

Ciclos For en Go: Uso y Ejemplos Prácticos

14

Operadores de Comparación y Lógicos en Go

15

Sentencias Condicionales If en Go: Uso y Ejemplos Prácticos

16

Condicionales en Go: Uso de Switch vs If

17

Uso de Keywords Differ, Break y Continue en Go

Estructuras de datos básicas

18

Manejo de Arrays y Slices en Go: Declaración y Modificación

19

Recorrido de Slices y Detección de Palíndromos en Go

20

Uso de Maps en Go: Diccionarios Llave-Valor

21

Structs en Go: Creación y Uso de Atributos y Métodos

22

Modificadores de Acceso en Go: Público y Privado

Métodos e interfaces

23

Punteros y Structs en Go: Aplicaciones Prácticas y Funciones

24

Personalización de Output de Structs en Go

25

Interfaces y Listas de Interfaces en Go: Conceptos y Aplicaciones

Concurrencia y Channels

26

Concurrencia y Paralelismo en Go: Conceptos y Ejemplos Prácticos

27

Concurrencia en Go: Uso de Goroutines y WaitGroups

28

Uso de Channels en Go para Concurrencia Eficiente

29

Manejo avanzado de channels en Go: len, cap, close y select

Manejo de paquetes y Go Modules

30

Uso de GoGet para Instalar Librerías en Go

31

Uso de GoModules para Gestión de Dependencias en Go

32

Uso correcto de GoModules para gestionar dependencias en Go

Despedida del curso

33

Recursos Avanzados y Comunidad para Desarrolladores en Go

Bonus

34

Conceptos Esenciales para Programar en Go

35

Desarrollo Web con Go: Frameworks y Librerías Esenciales

36

Estado del Arte de Go en Data Science y Herramientas Clave

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Uso de GoGet para Instalar Librerías en Go

30/36
Recursos

¿Qué es un manejador de paquetes en programación?

Los lenguajes de programación, como Python o Go, a menudo incluyen un manejador de paquetes, una herramienta esencial que permite a los desarrolladores compartir y gestionar librerías de código. Por ejemplo, Python utiliza pip y Go utiliza goget. Estos manejadores facilitan la reutilización de código y el acceso a librerías desarrolladas por la comunidad.

¿Cómo se utiliza goget en Go?

Para utilizar el manejador de paquetes en Go, simplemente necesitas ejecutar goget. No es necesario instalar nada adicional, ya que Go ya lo incluye al momento de su instalación. Con goget, puedes descargar librerías como GoTour, que fue desarrollada por Google para facilitar la introducción a Go de manera online.

¿Cómo instalar librerías con goget?

  1. Ejecuta el comando:
    goblanc.org/x/tour
    
  2. Para obtener feedback durante la descarga, añade la bandera -v para ver los detalles.
  3. Usa la bandera -u para asegurarte de que la librería se descargue nuevamente, aunque ya esté instalada.

¿Dónde se instala el código descargado?

  • Una vez descargado, el binario instalable se encuentra en la carpeta bin de tu GOPATH.
  • El código fuente queda en la carpeta src, organizada de acuerdo a la estructura de directorios.

Descubriendo la librería GoTour

GoTour ofrece una plataforma offline para aprender Go. Es como un mini-curso, permitiéndote:

  • Activar o desactivar opciones de sintaxis.
  • Ejecutar código y restablecerlo a su estado original.
  • Cambiar el idioma, aunque se recomienda usar inglés por la compleción de los recursos.

Se puede explorar distintos módulos sobre conceptos básicos de Go, como:

  • Declaración de variables
  • Estructuras
  • Interfaces y concurrencia

¿Dónde encontrar paquetes externos interesantes?

Existen varias fuentes, pero una recomendada es awesome-go.com, que agrupa numerosos proyectos y librerías por categoría, como:

  • Audio y música.
  • CSS.
  • Bases de datos.
  • Machine learning, entre otros.

Adicionalmente, librerías como Echo son muy valoradas para el desarrollo web con Go. Estos recursos incluyen enlaces a sus repositorios en GitHub, proporcionando un acceso fácil al código y documentación.

Reto práctico

Se invita a seguir explorando awesome-go.com, elegir una librería de interés y crear un "Hello World" con ella. Esto no solo te ayudará a practicar lo aprendido, sino también a familiarizarte más con el ecosistema de Go. Comparte tus avances y descubrimientos en la sección de comentarios, ¡se aprecia mucho el entusiasmo por compartir conocimiento! Te esperamos en la próxima clase para descubrir el uso de Go Mods con Echo.

Aportes 47

Preguntas 10

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para que funcione tour reemplazar:

go get golang.org/x/tour

Por:

go get golang.org/x/website/tour 

En go 1.18 si estamos fuera del directorio de go.mod tenemos que hacer la instalación con go install

Si intentamos ejecutar el comando que nos muestra el video nos saldrá este output

go: go.mod file not found in current directory or any parent directory.
	'go get' is no longer supported outside a module.
	To build and install a command, use 'go install' with a version,
	like 'go install example.com/cmd@latest'
	For more information, see https://golang.org/doc/go-get-install-deprecation
	or run 'go help get' or 'go help install'. 

Entonces, lo que debemos hacer es:

go install -v golang.org/x/website/tour@latest

Para los que no encuentren el código fuente del paquete, en mi caso estaba en:

~/go/pkg/mod/golang.org/x

Esta es la nueva forma de instalar tour

<go install golang.org/x/website/tour@latest> 

Por fin pude!

Tips para los que estan batallando:

  1. Asegurence que estan en la carpeta de GOPATH
  2. Creen un archivo del proyecto y hagan un mod init (nombre de carpeta)
  3. Go get del repo
  4. go mod tidy para obtener lo faltante (ayuda mucho para paquetes locales)

Paquetes locales extra:

  • go mod edit -replace=(nombre del paquete)=(direccion local del paquete)
    Ejemplo:
  • go mod edit -replace=exampl e. com/greetings=…/greetings

Como apunte adicional, he leído entre la comunidad que GO no fue pensado para manejar muchos paquetes para evitar lo que pasa con otros lenguajes como JavaScript, ya que el mayor fuerte de GO es más evidente cuando se usa el lenguaje en su estado más puro.

Para los que no les da es con el comando

go install golang.org/x/website/tour
tour -H
tour 


Explore los proyectos que se pueden hacer en go con videojuegos y el Pong que tiene el proyecto de OAK es muy similar a trabajar con el canvas de js o de python.
Le cambie el color a las barras de los jugadores para que sientan mas personalizados y el score lo puse mas grande, porque estaba en miniatura.

La verdad este curso no esta del todo bien elaborado, sinceramente no me ha gusto mucho, sin desmeritar ni desacreditar el instructor, solo me parece que puede tener una estructura mas formal y rica en contenido, siento que esto lo podria encontrar en youtube gratuito, solo es un comentario, tomenlo como una critica constructiva.

Yo tengo Ubuntu 20.04.3 LTS y me sucedio esto😋:

Cuando intentaba introducir este comando en la consola:

go install -v golang.org/x/website/tour@latest

me salía este error😣:

go: modules disabled by GO111MODULE=off; see 'go help modules'

lo que hice fue introducir este comando:

export GO111MODULE=on

y luego ya pude descargarlo con el mismo comando😎:

go install -v golang.org/x/website/tour@latest

Pagkage “ECHO”:

  1. Instalacion:
go get -u github.com/labstack/echo/... 
  1. Archivo “echoServer.go”:
package main

import (
	"net/http"
	"github.com/labstack/echo"
	"github.com/labstack/echo/middleware"
)

func main() {
	// Echo instance
	e := echo.New()

	// Middleware
	e.Use(middleware.Logger())
	e.Use(middleware.Recover())

	// Route => handler
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!\n")
	})

	// Start server
	e.Logger.Fatal(e.Start(":1323"))
} 

RESULTADO:

Para funcionar en la versión 1.21.4, he utilizado: ```js go install golang.org/x/website/tour@latest ```

Este es mi pequeño aporte mis notas sobre las go rutines, estaré tratando de resumir más cosas sobre el contenido de este curso a veces es algo confuso, o redundante pero extremadamente valioso!
Las go Rutines y los chanels son algo muy útil para nosotros así que bueno ojalá con esto puedan entender mejor!

Esta muy bueno la sección de IoT, me gustaría explorar ésta: https://github.com/tibcosoftware/flogo

A partir de la version 1.17 go get ya no instala los paquetes, y su comportamiento default es go get -d, pueden indgar mas sobre el tema aqui https://github.com/golang/go/issues/43684

GO GET ESTA DEPRECADO!!!

go: go.mod file not found in current directory or any parent directory.
	'go get' is no longer supported outside a module.
	To build and install a command, use 'go install' with a version,
	like 'go install example.com/cmd@latest'
	For more information, see https://golang.org/doc/go-get-install-deprecation

prueben con el siguiente comando

go install -v golang.org/x/website/tour@latest

Ademas mis archivos terminaron aqui despues de esa instalacion

~/go/pkg/mod/golang.org/x/website/tour@v0.0.0-20210616181959-e0d934b43647

Alguien podria explicarme el por que de ese cambio? gracias

El comando go get ya no es soportado. Ahora se usa go install. Por el momento no he encontrado un flag que sustituya a -u para reinstalar todo el paquete.

para la version 1.18.3 el comando get no funciona pero go dice que usemos go install, y también cambio la dirección del repositorio este fue el comando que ami me funciono

go install golang.org/x/website/tour@lates  

Un framework que me encanta para desarrollar APIs es Fiber, te da un boost de performance a tu proyecto ya que usa fasthttp en lugar del por defecto net/http que ya tiene GO

Para instalarlo solo ocupas escribir en tu terminal:

go get github.com/gofiber/fiber/v2

Y el hello world es:

package main

import "github.com/gofiber/fiber/v2"

func main() {
  app := fiber.New()

  app.Get("/", func(c *fiber.Ctx) error {
    return c.SendString("Hello, World!")
  })

  app.Listen(":3000")
}

Si vienes del mundo de node.js, usando Express o Fastify pueden observar la sintaxis es muy similar pero mejor, por que estamos usango GO jaja.

Me gustó mucho Gin para desarrollo web

CONSOLA:

[hmedina1@MANJARO practices]$ ./echoServer

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v3.3.10-dev
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:1323
 

RESULTADO:

Este video es muy confuso. No estoy seguro si se debe a que tengo la versión 1.22, ya que solo me descarga un archivo go.sum y no coloca nada en la variable de entorno $PATH. Además, debo inicializar el módulo (`go mod init`) para que el comando se ejecute correctamente desde la versión 1.17 en adelante. Por favor, consideren actualizar esta parte del video, ya que no funciona como se espera.
Usando Excelize para crear MS Excel files ```js package main import ( "fmt" "github.com/xuri/excelize/v2" ) func main() { f := excelize.NewFile() defer func() { if err := f.Close(); err != nil { fmt.Println(err) } }() // Create a new sheet. index, err := f.NewSheet("Sheet2") if err != nil { fmt.Println(err) return } // Set value of a cell. f.SetCellValue("Sheet2", "A2", "Hello world.") f.SetCellValue("Sheet1", "B2", 100) // Set active sheet of the workbook. f.SetActiveSheet(index) // Save spreadsheet by the given path. if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) } } ```package main import (    "fmt"     "github.com/xuri/excelize/v2") func main() {    f := excelize.NewFile()    defer func() {        if err := f.Close(); err != nil {            fmt.Println(err)        }    }()    // Create a new sheet.    index, err := f.NewSheet("Sheet2")    if err != nil {        fmt.Println(err)        return    }    // Set value of a cell.    f.SetCellValue("Sheet2", "A2", "Hello world.")    f.SetCellValue("Sheet1", "B2", 100)    // Set active sheet of the workbook.    f.SetActiveSheet(index)    // Save spreadsheet by the given path.    if err := f.SaveAs("Book1.xlsx"); err != nil {        fmt.Println(err)    }}

Para los usuarios de Ubuntu 20 se instala con estas líneas de código:

export GO111MODULE=on
go install -v golang.org/x/website/tour@latest

Para ejecutarlo nos dirijimos a la carpeta bin y ejecutamos la siguiente línea de código:

cd bin
./tour

Con esto logré ejecutar la librería.

He usado Echo, y me parece una muy buena opción para sacar el mayor rendimiento, es super rápido, aun así he querido aprender a usar Gin, se dice que es uno de los más usados, muchos lo prefieren. Aquí dejo el ejemplo de cómo sería el Hola mundo en Gin.

package main

import (
  "net/http"

  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  r.GET("/saludo", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
      "message": "Hola Mundo!",
    })
  })
  r.Run()
}

Desearía también aprender machine learning con Go.

Utilizé gron para correr process cada cierto tiempo e investigue como dejar corriendo go que fue la ultimas líneas que agregue

package main

import (
	"fmt"
	"os"
	"os/signal"
	"time"

	"github.com/roylee0704/gron"
)

func main() {
	c := gron.New()
	c.AddFunc(gron.Every(1*time.Second), func() {
		fmt.Println("runs every second.")
	})
	c.Start()
        // Dejar corriendo go hasta cancelarlo con ctrl + c
	sig := make(chan os.Signal)
	signal.Notify(sig, os.Interrupt, os.Kill)
	<-sig
}

Aguante gin gonic vieja no me importa nada ❤️ Muchisimas gracias por este pedazo de curso jeje

 mkdir myapp && cd myapp
$ go mod init myapp
$ go get github.com/labstack/echo/v4
//Crear server.go

package main

import (
	"net/http"
	
	"github.com/labstack/echo/v4"
)

func main() {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!")
	})
	e.Logger.Fatal(e.Start(":1323"))
}

Go get: manejo de paquetes

Go permite la intalacion de paquetes, por ejemplo el tour de go

go get golang.org/x/website/tour 

y se ejecuta en local con el comando tour lo que nos abre en el navegador el tour de go.

Por otro lado.
En la pagina awesome-go
encontraremos un monton de paquetes que podemos usar segun la necesidad que tengamos.
por ejemplo echo que es un framework Web y nos lleva a su pagina oficial
echo

Creamos un archivo por ejemplo echo.go

package main

import (
  "github.com/labstack/echo/v4"
  "github.com/labstack/echo/v4/middleware"
  "net/http"
)

func main() {
  // Echo instance
  e := echo.New()

  // Middleware
  e.Use(middleware.Logger())
  e.Use(middleware.Recover())

  // Routes
  e.GET("/", hello)

  // Start server
  e.Logger.Fatal(e.Start(":1323"))
}

// Handler
func hello(c echo.Context) error {
  return c.String(http.StatusOK, "Hello, World!")
}

Al ejecutar go run echo.go nos arroja


   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v3.3.10-dev
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:1323

Al ingresar en el navegador en localhost:1323 veremos el Hello, World!

Para el reto, decidi optar por Gorilla mux, el router del framework Gorilla

package main

import (
	"fmt"
	"net/http"

	"github.com/gorilla/mux"
)

func homePage(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello world")
}

func main() {
	router := mux.NewRouter().StrictSlash(true)
	router.HandleFunc("/", homePage)
	http.ListenAndServe(":8088", router)
}

Me interesa mucho este driver de mongo

package main

import (
	"net/http"

	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
)

func main() {
	// Echo instance
	e := echo.New()

	// Middleware
	e.Use(middleware.Logger())
	e.Use(middleware.Recover())

	// Routes
	e.GET("/", hello)

	// Start server
	e.Logger.Fatal(e.Start(":1323"))
}

// Handler
func hello(c echo.Context) error {
	return c.String(http.StatusOK, "Hello, World!")
}

Hello world con el Framework web Fiber

package main

import "github.com/gofiber/fiber/v2"

func main() {
	app := fiber.New()

	app.Get("/", func(c *fiber.Ctx) error {
		return c.SendString("Hello, World 👋!")
	})

	app.Listen(":3000")
}

El reto de la clase, lo subí a https://github.com/w00k/gin-hello-world

gracias

Joe Bot

https://joe-bot.net/
Puedes crear bots para diferentes plataformas

Éste bot Responde “PONG” cuando
recibe el mensaje “ping”

package main

import "github.com/go-joe/joe"

func main() {
	b := joe.New("example-bot")
	b.Respond("ping", Pong)

	err := b.Run()
	if err != nil {
		b.Logger.Fatal(err.Error())
	}
}

func Pong(msg joe.Message) error {
	msg.Respond("PONG")
	return nil
}

En el caso de JavaScript es NPM

Hugo es un framework para crear sitios web.
Documentación: gohugo.io

Mi hello world de echo.

Corrijo

go get -v -u golang.org/x/tour
got get -v -u golang.org/x/tour

Interesante

Para ejecutar en linux

./tour  

Me gustó el framework de desarrollo web Gin

yo desde linux mint pude acceder desde go/bin

go$ find . -name "tour"
./bin/tour
./pkg/mod/cache/download/golang.org/x/tour
./pkg/mod/cache/download/golang.org/x/website/tour
./pkg/mod/golang.org/x/[email protected]/tour
go$ cd bin/
bin$ ./tour 
2021/08/14 00:49:14 Serving content from ~/go/pkg/mod/golang.org/x/website/tour@v0.0.0-20210616181959-e0d934b43647
2021/08/14 00:49:14 A browser window should open. If not, please visit http://127.0.0.1:3999
2021/08/14 00:49:15 accepting connection from: 127.0.0.1:45264

Si quieres actualizar un paquete que ya fue instalado en tu proyecto:

go get -u packageName

Para actualizar todos los paquetes de tu proyecto, puedes ejecutar:

go get -u ./... 

Como trabajo en un disco que no es el c, no me deja instalar ahí, abrí una terminal de windows y ejecute el código y pude descargar el codigo.

Genial:

go get example