Last active
August 9, 2022 18:56
-
-
Save lalizita/e8d39dea3621b6649602f7d6b0a0ec8c to your computer and use it in GitHub Desktop.
Quiz with timer in Go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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