Herramientas de usuario

Herramientas del sitio


informatica:programacion:go

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:go [2021/08/31 10:18] – [Interface] tempwininformatica:programacion:go [2023/08/31 09:59] (actual) – [Linux manual] tempwin
Línea 16: Línea 16:
   * [[https://blog.golang.org/gofmt|gofmt]]: herramienta oficial que automáticamente formatea código Go. Tan sencillo como ''gofmt -w codigo.go''   * [[https://blog.golang.org/gofmt|gofmt]]: herramienta oficial que automáticamente formatea código Go. Tan sencillo como ''gofmt -w codigo.go''
   * Compilación cruzada: poder compilar en diferentes sistemas y hacia cualquier sistema.   * Compilación cruzada: poder compilar en diferentes sistemas y hacia cualquier sistema.
 +  * Manejo muy eficiente de concurrencia 
  
 Go te obliga a mantener el código limpio. Si declaras la importación de un paquete y no lo usas, Go se quejará y no compilará: Go te obliga a mantener el código limpio. Si declaras la importación de un paquete y no lo usas, Go se quejará y no compilará:
Línea 174: Línea 175:
 </code> </code>
  
-Comprobamos:+Comprobamos si todo está instalado y configurado correctamente:
  
 <code> <code>
 $ go version $ go version
  
-go version go1.15.linux/amd64+go version go1.20.linux/amd64
 </code> </code>
  
Línea 217: Línea 218:
  
 <code> <code>
-go version go1.17 linux/amd64+go version go1.21.0 linux/amd64
 </code> </code>
 ===== Configuración ===== ===== Configuración =====
Línea 2266: Línea 2267:
 </WRAP> </WRAP>
  
 +===== Goroutines y channels =====
 +
 +Mucha de la programación que se hace es secuencial. Las rutinas de Go y los canales permiten realizar operaciones mientras otro código está en ejecución. Son como los hilos.
 +
 +Los canales se comunican entre las rutinas de go. Las rutinas necesitan comunicarse para saber cuándo finalizan y saber si deben detenerse o continuar.
 +
 +Un ejemplo de uso sería una rutina para leer varios ficheros. En lugar de abrir uno, leer todo el contenido, cerrar el fichero y proceder con el siguiente, se puede hacer todo esto al mismo tiempo. Los canales pueden avisar cuándo se ha terminado de leer todos los ficheros.
 +
 +Otro ejemplo sería contar la duración de la ejecución de una función. Se podría lanzar una goroutine con un contador de tiempo para que guarde la duración de la función. Estos dos procesos se ejecutan a la vez y uno de ellos está esperando a que el otro termine.
 +
 +<code go>
 +func goRoutinesAndChannels() {
 +    files := []string{
 +        "file1.csv",
 +        "file2.csv",
 +        "file3.csv",
 +    }
 +    
 +    rowChannel := make(chan int, len(files))
 +    
 +    for _, file := range files {
 +        file := file // this is stupid, but we have to because closures. big go pitfall!
 +        
 +        go func() {
 +            numRows, err := countRows(file)
 +            if err != nil {
 +                panic("aaaaah!")
 +            }
 +            
 +            rowChannel <- numRows
 +        }()
 +    }
 +    
 +    var totalRows int
 +    for range files {
 +        numRows := <- rowChannel
 +        totalRows += numRows
 +    }
 +    
 +    return totalRows
 +}
 +</code>
 ===== Punteros ===== ===== Punteros =====
  
Línea 2390: Línea 2433:
   * [[https://golang.org/ref/spec|The Go Programming Language Specification]]   * [[https://golang.org/ref/spec|The Go Programming Language Specification]]
   * [[https://tour.golang.org/|A Tour of Go]]   * [[https://tour.golang.org/|A Tour of Go]]
 +  * [[https://golang.org/doc/effective_go|Effective Go]]
   * [[https://golang.org/pkg/|Documentación sobre paquetes]]   * [[https://golang.org/pkg/|Documentación sobre paquetes]]
 +  * [[https://go.dev/blog/|The Go blog]]
 +  * [[https://gobyexample.com/|Go by Example]]
   * [[https://www.youtube.com/watch?v=Yo2xmii7TbA|Learn to Code Go in 17 minutes | Golang Programming Crash Course]] (YouTube)   * [[https://www.youtube.com/watch?v=Yo2xmii7TbA|Learn to Code Go in 17 minutes | Golang Programming Crash Course]] (YouTube)
   * [[https://play.golang.org/|The Go Playground]]: prueba o comparte código desde el navegador.   * [[https://play.golang.org/|The Go Playground]]: prueba o comparte código desde el navegador.
Línea 2396: Línea 2442:
   * https://forum.golangbridge.org: foro oficial   * https://forum.golangbridge.org: foro oficial
   * [[https://github.com/inancgumus/learngo|1000+ Hand-Crafted Go Examples, Exercises, and Quizzes]]   * [[https://github.com/inancgumus/learngo|1000+ Hand-Crafted Go Examples, Exercises, and Quizzes]]
 +  * [[https://astaxie.gitbooks.io/build-web-application-with-golang/content/en/|Build Web Application with Golang]]
 +  * [[http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/|50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs]]
 +  * [[https://gophercises.com/|Gophercises: Coding exercises for budding gophers]] (requiere crearse una cuenta)
informatica/programacion/go.1630397939.txt.gz · Última modificación: por tempwin