Skip to content

bootcamp-go/bcgo-w8

Repository files navigation

Frequently Asked Questions (FAQ)


▶ Github

Authentication


✔ SSH

create new ssh key

# go to root folder
cd ~
# go to ssh folder
mkdir .ssh && cd .ssh

# save new ssh key
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

config ssh config file

touch config

open the config file and add the following

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa

✔ Github

copy the SSH key

pbcopy < ~/.ssh/id_rsa.pub

go to your Github account and add the SSH key


✔ Test

We test the SSH connection to Github (the identity file is specified in the config file)

test the SSH connection

ssh -T git@github.com

In order to test other identities, you can use the following command

ssh -i ~/.ssh/key -T git@github.com

Up to now you have configured the SSH key (public / private), indicate ssh which identity file to use and added the SSH key (public) to your Github account. We can use an optional service to manage the SSH keys (cache) and avoid to enter the phrase each time we use the SSH key.


✔ SSH-Agent - Optional

initialize ssh-agent as a service of ssh keys management (cache) (optional)

start the ssh-agent in the background

eval "$(ssh-agent -s)"

add your SSH private key to the ssh-agent

ssh-add -K ~/.ssh/id_rsa



▶ Terminal

in progress...




▶ Go

Go Routines

Cuando trabajamos con concurrencia, una de las formas de comunicar los procesos es mediante canales . La otra forma es via "shared memory" aunque aplica otros mecanismos y es mas riesgoso. Un canal implica la comunicación entre 2 entidades, un 'Sender' y un 'Receiver'. Si un proceso termina de realizar su tarea, puede dejar sus resultados o algún mensaje en el canal, que le será de utilidad a la entidad o proceso que lo reciba. Las reglas que aplican dependerá de las características en las que funcione el canal.

Existen 2 tipos: Unbuffered Channel y Buffered Channel

Unbuffered Channel: es un canal que no tiene un tamaño definido, de comunicacion directa. Esto implica que el 'Sender' y el 'Receiver' deben estar sincronizados para que la comunicación sea exitosa.

  • Caso 1: Si el 'Sender' envía un mensaje y el 'Receiver' no lo recibe, el 'Sender' se quedará esperando hasta que el 'Receiver' lo reciba y el proceso se estancará, pues el sender no podra continuar con otras tareas.
  • Caso 2: Si el 'Receiver' recibe un mensaje y el 'Sender' no lo envía, el 'Receiver' se quedará esperando hasta que el 'Sender' lo envíe. Tambien genera un estancamiento, pues el 'Receiver' no podrá continuar con otras tareas.

El estancamiento se conoce como "Deadlock"

alt text

Buffered Channel: es un canal que tiene un tamaño definido, de comunicacion indirecta. Esto implica que el 'Sender' y el 'Receiver' no necesariamente deben estar sincronizados para que la comunicación sea exitosa.

  • Caso 1: Si el 'Sender' envía un mensaje y el 'Receiver' no lo recibe, el 'Sender' no se quedará esperando hasta que el 'Receiver' lo reciba, pues el canal tiene un tamaño definido y puede almacenar mensajes. El 'Sender' podrá continuar con otras tareas.
  • Caso 2: Si el 'Receiver' recibe un mensaje y el 'Sender' no lo envía, el 'Receiver' no se quedará esperando hasta que el 'Sender' lo envíe, pues el canal tiene un tamaño definido y puede almacenar mensajes. El 'Receiver' podrá continuar con otras tareas hasta que el canal quede vacío.

alt text

About

Colección de ejemplos conceptuales, proporcionados durante las clases en vivo.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published