Hola mundo en Go

1

Introducción al Curso de Golang

2

¬ŅQu√© es, por qu√© y quienes utilizan Go?

3

Instalar Go en Linux

4

Instalar Go en Mac

5

Instalar Go en Windows

6

Nuestras primeras líneas de código con Go

Variables, funciones y documentación

7

Variables, constantes y zero values

8

Operadores aritméticos

9

Tipos de datos primitivos

10

Paquete fmt: algo m√°s que imprimir en consola

11

Uso de funciones

12

Go doc: La forma de ver documentación

Estructuras de control de flujo y condicionales

13

El poder de los ciclos en Golang: for, for while y for forever

14

Operadores lógicos y de comparación

15

El condicional if

16

M√ļltiple condiciones anidadas con Switch

17

El uso de los keywords defer, break y continue

Estructuras de datos b√°sicas

18

Arrays y Slices

19

Recorrido de Slices con Range

20

Llave valor con Maps

21

Structs: La forma de hacer clases en Go

22

Modificadores de acceso en funciones y Structs

Métodos e interfaces

23

Structs y Punteros

24

Stringers: personalizar el output de Structs

25

Interfaces y listas de interfaces

Concurrencia y Channels

26

¬ŅQu√© es la concurrencia?

27

Primer contacto con las Goroutines

28

Channels: La forma de organizar las goroutines

29

Range, Close y Select en channels

Manejo de paquetes y Go Modules

30

Go get: El manejador de paquetes

31

Go modules: Ir m√°s all√° del GoPath con Echo

32

Modificando módulos con Go

Despedida del curso

33

Despedida

Bonus

34

Cheat Sheet Go

35

Librerías para desarrollo web con Go

36

Data Science con Go

A√ļn no tienes acceso a esta clase

Crea una cuenta y contin√ļa viendo este curso

Go get: El manejador de paquetes

30/36
Recursos

Aportes 35

Preguntas 7

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi√≥n.

Para que funcione tour reemplazar:

go get golang.org/x/tour

Por:

go get golang.org/x/website/tour 

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

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

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

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/[email protected]'
	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/[email protected]


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.

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.

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:

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

Para los que no les da es con el comando

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

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

This command works for me, I have Ubuntu 20.04.3 LTS:

go install golang.org/x/website/[email protected]

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:

[[email protected] practices]$ ./echoServer

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

RESULTADO:

Esta es la nueva forma de instalar tour

<go install golang.org/x/website/[email protected]> 

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/[email protected]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

discordgo, para hacer bots de discord, y la use para un peque√Īo bot: https://github.com/ELPanaJose/bruh-s-power

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