add: spanish 03-packages-and-scopes

This commit is contained in:
juanfmange
2022-01-04 06:04:17 -06:00
committed by İnanç Gümüş
parent 0111ccddba
commit 27157638bd
25 changed files with 718 additions and 0 deletions

View File

@ -0,0 +1,15 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func bye() {
fmt.Println("Bye!")
}

View File

@ -0,0 +1,15 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func hey() {
fmt.Println("Hey!")
}

View File

@ -0,0 +1,25 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func main() {
fmt.Println("Hello!")
// Puedes acceder a funciones desde otros archivos
// los cuales esten en el mismo paquete
// Por ejemplo, `main()` puede acceder a `bye()` y `hey()`
// Porque bye.go, hey.go y main.go
// estan en el mismo paquete.
bye()
hey()
}

View File

@ -0,0 +1,24 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
// Librerias importadas
import "fmt"
// variables del paquete
const ok = true
// función del paquete
func main() { // Empieza el bloque de la función
var hola = "Hola"
// hola y ok son visibles aquí
fmt.Println(hola, ok)
} // Termina el bloque de la función

View File

@ -0,0 +1,27 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
func nope() { // Empieza el bloque de la función
// hola y ok solamente son visibles aquí
const ok = true
var hola = "Hola"
_ = hola
} // Termina el bloque de la función
func main() { // Empieza el bloque de la función
// hola y ok no son visibles aquí
// ERROR:
// fmt.Println(hola, ok)
} // Termina el bloque de la función

View File

@ -0,0 +1,40 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
// No hable de esto en la lectura
// quiero dejarlo aqui como una pequeña nota
// Por favor revisalo.
var declarameOtraVez = 10
func anidado() { // Empieza el bloque de la función
// declara las misma variables
// ambas pueden existir juntas
// Esta solo pertenece a esta función
// la variable del paquete sigue intacta
var declarameOtraVez = 5
fmt.Println("Dentro del anidado:", declarameOtraVez)
} // Termina el bloque de la función
func main() { // Empieza el bloque de la función
fmt.Println("Dentro de main:", declarameOtraVez)
anidado()
// a nivel paquete, declarameOtraVez no fue alterado
// desde el cambio dentro de la funcion anidado
fmt.Println("Dentro de main:", declarameOtraVez)
} // Termina el bloque de la función

View File

@ -0,0 +1,15 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func bye() {
fmt.Println("Bye!")
}

View File

@ -0,0 +1,14 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func hey() {
fmt.Println("Hey!")
}

View File

@ -0,0 +1,35 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func main() {
fmt.Println("Hello!")
//Dos archivos pertenecen al mismo paquete
// llamando `bye()` de bye.go a aqui
bye()
}
// Ejercicio: Quita los comentarios de la siguiente función y analiza el error
// func bye() {
// fmt.Println("Bye!")
// }
// ***** EXPLICACIÓN *****
//
// ERROR: "bye" function "redeclared"
// in "this block"
//
// "this block" significa = "main package"
//
// "redeclared" significa = Estas usando el mismo nompre en la funcion otra vez
//
// La función main package es:
// todo el codigo que esta en el mismo paquete main

View File

@ -0,0 +1,19 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
// quita los comentarios del codigo para ver el error
// (Solo quita las // del codigo en las 3 lineas siguientes)
// Este archivo no puede ver los nombres importados de main.go ("fmt")
// porque los nombres importados pertenecen a la funcion del archivo (librerias)
// func bye() {
// fmt.Println("Bye!")
// }

View File

@ -0,0 +1,14 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func main() {
fmt.Println("Hello!")
}

View File

@ -0,0 +1,19 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import (
"fmt"
f "fmt"
)
func main() {
fmt.Println("Hello!")
f.Println("There!")
}

View File

@ -0,0 +1,33 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
// ---------------------------------------------------------
// EJERCICIO: Usa tu propio paquete
//
// Crea algunos archivos Go y llama sus funciónes desde
// la funcion main
//
// 1- Crea los archivos main.go, greet.go y bye.go
// 2- En main.go: Llama a las funciones greet y bye.
// 3- Corre `main.go`
//
// PISTA
// La funcion greet deberia de estar en greet,go
// La funcion bye deberia de estar en bye.go
//
// SALIDA ESPERADA
// Hola!!
// Adios!!
// ---------------------------------------------------------
func main() {
// Llama a las funciones de los otros archivos aqui.
}

View File

@ -0,0 +1,15 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// For more tutorials : https://learngoprogramming.com
// In-person training : https://www.linkedin.com/in/inancgumus/
// Follow me on twitter: https://twitter.com/inancgumus
package main
import "fmt"
func bye() {
fmt.Println("adios!!")
}

View File

@ -0,0 +1,15 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func greet() {
fmt.Println("hola!!")
}

View File

@ -0,0 +1,14 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
func main() {
greet()
bye()
}

View File

@ -0,0 +1,31 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
// ---------------------------------------------------------
// EJERCICIO: Prueba las funciones
//
// 1. Crea 2 archivos: main.go y printer.go
//
// 2. En printer.go:
// 1. Crea una funcion llamada hello
// 2. Dentro de la funcion hello, imprime tu nombre
//
// 3. En main.go:
// 1. Crea la tipica funcion func main
// 2. Llama a tu funcion solo usando su nombre: hello
// 3. Crea una funcion llamda bye
// 4. Dentro de la funcion bye, imprime "bye bye"
//
// 4. En printer.go:
// 1. Llama a la funcion bye desde dentro de la funcion hello
// ---------------------------------------------------------
func main() {
}

View File

@ -0,0 +1,39 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func main() {
// Como puedes verm no necesito importar el un paquete
// y puedo llamar a la funcion 'hello' aqui
//
// Esto es porque las funciones de paquetes (librerias)
// estan compartidas en el mismo paquete
hello()
// pero aqui no puedo acceder al paquete fmt sin importarlo
//
// Esto es porque esta en la funcion del archivo printer.go
// lo importa
//
// esta funcion main puede tambien llamar a la funcion bye aqui
// bye()
}
// printer.go puede llamar a esta funcion
//
// Esto es porque la funcion bye esta en la funcion del paquete (libreria)
// del paquete main ahora
// .
//
// La funcion main tambien puede llamar aqui.
func bye() {
fmt.Println("bye bye")
}

View File

@ -0,0 +1,20 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import "fmt"
func hello() {
// Solo este archivo puede acceder a la funcion de paquete fmt
// cuando otros ya lo hiciero, ellos tamvien pueden acceder
// Su propio 'fmt' "name"
fmt.Println("hi! this is inanc!")
bye()
}

View File

@ -0,0 +1,31 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
// ---------------------------------------------------------
// EJERCICIO: Renombra las importaciones
//
// 1- Importa el paquete fmt tres veces con diferentes nombres
// 2- Imprime algunos mensajes usando esas importaciones
//
// SALIDA ESPERADA
// hello
// hey
// hi
// ---------------------------------------------------------
// ?
// ?
// ?
func main() {
// ?
// ?
// ?
}

View File

@ -0,0 +1,22 @@
// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Para más tutoriales : https://learngoprogramming.com
// Clases particulares : https://www.linkedin.com/in/inancgumus/
// Sigueme en twitter: https://twitter.com/inancgumus
package main
import (
"fmt"
f "fmt"
fm "fmt"
)
func main() {
fmt.Println("hello")
f.Println("hey")
fm.Println("hi")
}

View File

@ -0,0 +1,13 @@
1. **[Usa tus propios paquetes](https://github.com/inancgumus/learngo/tree/master/03-packages-and-scopes/exercises/01-packages)**
Crea algunos archivos Go y llama sus funciones desde la función main.
2. **[Prueba las funciones](https://github.com/inancgumus/learngo/tree/master/03-packages-and-scopes/exercises/02-scopes)**
Aprende los efectos del acceso de funciones de paquetes ó Librerias.
3. **[Renombra las importaciones](https://github.com/inancgumus/learngo/tree/master/03-packages-and-scopes/exercises/03-importing)**
Importa los mismos paquetes usando diferentes nombres.

View File

@ -0,0 +1,50 @@
## ¿Dónde almacenar los archivos de código fuente que pertenecen a un paquete?
1. Cada archivo debe ir a un directorio diferente
2. En un solo directorio *CORRECTO*
## ¿Por qué se utiliza una cláusula de paquete en un archivo de código fuente de Go?
1. Se usa para importar un paquete.
2. Se utiliza para informarle a Go que el archivo pertenece a un paquete *CORRECTO*
3. Se usa para declarar una nueva función
> **1:** `import` declaración hace eso.
>
>
> **3:** `func` declaración hace eso.
>
>
## ¿Dónde debería poner el `package clause` en un archivo de código fuente de Go?
1. Como primer código en un archivo de código fuente de Go *CORRECTO*
2. Como último código en un archivo de código fuente de Go
3. Puedes ponerlo en cualquier lugar
## ¿Cuántas veces puede usar`package clause` para un solo archivo de código fuente?
1. Una vez *CORRECTO*
2. Ninguna
3. Varias veces
## ¿Cuál es el uso correcto de`package clause`?
1. `my package`
2. `package main`
3. `pkg main`
## ¿Cual es la correcta?
1. Todos los archivos pertenecen al mismo paquete no pueden llamar a las funciones de los demás
2. Todos los archivos pertenecen al mismo paquete pueden llamar a las funciones de los demás *CORRECTO*
## ¿Cómo ejecutar varios archivos Go?
1. go run *.*go
2. go build *go
3. go run go
4. go run *.go *CORRECTO*
> **4:** También puede llamarlo como (asumiendo que hay file1.go file2.go y file3.go en el mismo directorio): vaya a ejecutar file1.go file2.go file3.go
>
>

View File

@ -0,0 +1,41 @@
## ¿Cuál de los siguientes es un tipo de paquete correcto en Go?
* Paquete vacio
* Paquete ejecutable *CORRECTO*
* Paquete transferible
* Paquete de libreria
## ¿Qué tipo de paquete `go run` puede ejecutar?
* Paquete vacio
* Paquete ejecutable *CORRECTO*
* Paquete transferible
* Paquete de libreria
## ¿Qué tipo de paquete `go run` puede compilar?
* Paquete vacio
* Paquete temporal
* Ambos paquetes ejecutables y de libreria *CORRECTO*
* Paquete transferible
## ¿Cuál es un paquete ejecutable?
* `package main` con `func main` *CORRECTO*
* `package Main` con `func Main`
* `package exec` con `func exec`
## ¿Cuál es un paquete de libreria?
* `main package`
* `package lib` *CORRECTO*
* `func package`
* `package main` con `func main`
## ¿Qué paquete se utiliza para un programa Go ejecutable?
* Paquete vacio
* Paquete ejecutable *CORRECTO*
* Paquete transferible
* Paquete de libreria
## ¿Qué paquete se utiliza para la reutilización y se puede importar?
* Paquete vacio
* Paquete ejecutable
* Paquete transferible
* Paquete de libreria *CORRECTO*

View File

@ -0,0 +1,132 @@
## ¿Qué es una funcion?
* Bloque de código ejecutable
* La visibilidad de los nombres declarados **CORRECTO**
* Determina qué ejecutar
```go
package awesome
import "fmt"
var enabled bool
func block() {
var counter int
fmt.Println(counter)
}
```
## ¿Qué nombre a continuación tiene la fuincion del paquete(libreria)?
1. awesome
2. fmt
3. enabled **CORRECTO**
4. counter
> **3:** Eso es correcto.`enabled` enabledestá fuera de cualquier función, por lo que es un nombre de ámbito de paquete. La funcion `block()` también tiene el alcance del paquete; también está fuera de cualquier función.
>
>
## ¿Qué nombre a continuación tiene la funcion del archivo?
1. awesome
2. fmt **CORRECTO**
3. enabled
4. block()
5. counter
> **2:** Eso es correcto. Los nombres de los paquetes importados tienen un ámbito de archivo. Y solo se pueden usar dentro del mismo archivo.
>
>
## ¿Qué nombre a continuación está en el alcance de la función block ()?
1. awesome
2. fmt
3. enabled
4. block()
5. counter **CORRECTO*
> **5:** Eso es correcto. `counter` se declara dentro de la funcion `block()` por lo que está en el alcance del bloque func. Fuera de la funcion `block()`, otro código no puede verlo.
>
>
## ¿Puede `block()` ver el nombre `enabled`?
1. Sí: está en el alcance del paquete **CORRECTO**
2. No: está en el alcance del archivo
3. No: está en el alcance del bloque de block ()
> **1:** Todo el código dentro del mismo paquete puede ver todos los demás nombres declarados a nivel de paquete.
>
>
## ¿Pueden otros archivos en el paquete `awesome` ver el nombre de `counter`?
1. Si
2. No: está en la funcion del paquete
3. No: está en la funcion del archivo
4. No: está en la funcion del block() **CORRECTO**
> **4:** Eso es correcto. Ninguno de los otros códigos puede ver los nombres dentro de la funcion `block()` .Solo el código dentro de la funcion `block()` puede verlos (Solo hasta cierto punto. Por ejemplo: Dentro del bloque, el código solo puede ver las variables declaradas antes).
>
## ¿Pueden otros archivos en el paquete `awesome` ver el nombre de`fmt` ?
1. Si
2. No: está en la funcion del paquete
3. No: está en la funcion del archivo **CORRECTO**
4. No: está en la funcion del bloque()
> **3:** Solo el mismo archivo puede ver los paquetes importados, no los otros archivos, ya sea que estén en el mismo paquete o no.
>
>
## ¿Qué sucede si declaras el mismo nombre en el mismo ámbito que este?
```go
package awesome
import "fmt"
// declared twice in the package scope
var enabled bool
var enabled bool
func block() {
var counter int
fmt.Println(counter)
}
```
1. El nombre recién declarado prevalecerá sobre el anterior.
2. No puedo hacer eso. Ya se ha declarado en la funcion del paquete. *CORRECTO*
3. No puedo hacer eso. Ya se ha declarado en la funcion del archivo.
> **2:** Eso es correcto. No puede declarar el mismo nombre en el mismo ámbito. Si pudiera hacerlo, ¿cómo volvería a acceder a él? ¿O a cuál?
>
>
## ¿Qué sucede si declaras el mismo nombre en otro ámbito como este?:
```go
package awesome
import "fmt"
// declared at the package scope
var enabled bool
func block() {
// also declared in the block scope
var enabled bool
var counter int
fmt.Println(counter)
}
```
1. El nombre recién declarado prevalecerá sobre el anterior. *CORRECTO*
2. No puedo hacer eso. Ya se ha declarado en la funcion del paquete.
3. No puedo hacer eso. Ya se ha declarado en la funcion del archivo.
> **1:** En realidad, puede declarar el mismo nombre en los ámbitos internos de esta manera. La funcion `block()` está dentro de su paquete. Esto significa que puede acceder al alcance de su paquete (pero no al revés). Entonces, la funcion `block()`de 'está bajo el alcance de su paquete. Esto significa que puede volver a declarar el mismo nombre. Anulará el nombre del ámbito principal. Ambos pueden existir juntos. Consulte el ejemplo en el repositorio de cursos para averiguarlo.
>
>