Skip to content

Instantly share code, notes, and snippets.

@lalizita
Last active August 9, 2022 18:56
Show Gist options
  • Save lalizita/e8d39dea3621b6649602f7d6b0a0ec8c to your computer and use it in GitHub Desktop.
Save lalizita/e8d39dea3621b6649602f7d6b0a0ec8c to your computer and use it in GitHub Desktop.
Quiz with timer in Go
package main
import (
"fmt"
"os"
"time"
)
func timer() {
// Cria um ticker, um relógio que retorna um channel com o tempo atual,
// aqui queremos esse saber do relógio a cada 1 segundo
ticker := time.NewTicker(1 * time.Second)
// cria um channel (canal de comunicação entre as goroutines)
done := make(chan bool)
// Goroutine com função anonima que fica escutando
// o valor channel para encerrar o programa
go func() {
//Verifica se o valor que done recebeu é igual a true
if <-done == true {
fmt.Println("Time is ended")
//encerra o programa
os.Exit(1)
return
}
}()
//Pausamos a função atual por 5 segundos
time.Sleep(5 * time.Second)
//Após os 5 segundos de pausa, paramos o nosso "Ticker"
ticker.Stop()
// Mandamos o valor true para o nosso channel
// após tornar isso true o nosso if anterior será verdadeiro
// pois ele está verificando o valor do channel
done <- true
}
func main() {
fmt.Println("Start de quiz")
//Goroutine que ficará rodando em segundo plano
go timer()
var number int
correctAnswer := 4
fmt.Print("How many is 2 +2? ")
// Recebe o valor digitado no terminal
// Adiciona o valor à variável number
fmt.Scanf("%d", &number)
if number != correctAnswer {
fmt.Println("wrong answer")
} else {
fmt.Println("CONGRATS!")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment