Sobes.tech

Golang

¿Ha utilizado patrones de Bandeja de entrada y Bandeja de salida?

274

Tarea: «Ping-pong con timeout» Escribe una función pingPong que: - Inicie dos goroutines: una genera mensajes "ping", la otra — "pong". - Las goroutines deben intercambiar mensajes a través de un canal común estrictamente por turnos. - El intercambio continúa durante 3 segundos, después de lo cual el programa debe terminar (apagado ordenado). - Usa un contexto para cancelar con un timeout. - Muestra cada mensaje en pantalla junto con el tiempo (en milisegundos desde el inicio). Ejemplo de salida esperada: 0ms: ping

216

Tarea sencilla de codificación en vivo (competencia básica) Condición: Escribe una función fetchAll(urls []string) map[string]string, que para cada URL realice una solicitud HTTP GET de manera concurrente y devuelva un mapa donde la clave sea la URL y el valor sea el cuerpo de la respuesta (cadena). Si la solicitud falla (error, no 200), el valor será una cadena vacía. Restricciones: - No se pueden usar bibliotecas externas (solo las estándar). - No se puede cambiar la firma. - El programa no debe fallar ante un pánico en http.Get. Ejemplo de entrada: ["[link]" "[link]" "[link]"]

203

paquete principal importar ( "fmt" ) func a(p *string) { s2 := "string2" *p = s2 } func main() { str1 := "string1" p := &str1 fmt.Println(*p) a(&p) fmt.Println(*p) }

185

Qué decirle al entrevistador (si te pregunta) "Usaría un grupo de trabajadores con un número fijo de workers, un canal para tareas y sync.WaitGroup. Los workers realizarán las solicitudes, y el timeout y la cancelación se controlarán a través del contexto. Reuniré los resultados en un buffer, protegido por un mutex (o a través de un canal separado)." Ahora es tu turno Escribe el código en este chat. Lo revisaré y te daré retroalimentación. Si no sabes por dónde empezar, pide una pista. ¡Buena suerte!

177

// todos los elementos del slice deben ser únicos + deben consistir en 1000 elementos en total // el programa no debe colgarse por mucho tiempo debido a time.sleep func main() { checkIncrement := map[int]int32{} var data []int for i := 0; i < 1000; i++ { go func() { data = append(data, i) if _, found := checkIncrement[i]; found { fmt.Println(i) panic("incremento duplicado") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }

159

¿Qué es un puntero y qué pasará si el argumento de una función es un puntero?

159

Llenar el slice con elementos sin mutex para que tenga los 1000 elementos.

148