Fiz esse desafio usando a linguagem Go, e aproveitei para testar o meu sistema de Scan proprio que criei para Go, ele pode ser usado em qualquer projeto. O fiz utilizando generics, enquanto o Scan ou Scanf do Go so retorna o numero de items com sucesso e um error e voce nao pode passar uma mensagem nele, o que fiz cobre essas possibilidades para Any types.
O Scan do go e assim:
v, err := fmt.Scan(&attempts)
uma sintaxe bem simples, ele nao e como o do java por exemplo, que retorna direto o valor do input. O que criei tem o intuito de ser mais parecido com o do Java, no caso, e uma mistura entre os dois, tanto Scanner do Java quanto Scan/Scanf do Go, onde voce pode passar uma message, ela pode ou nao ser formatada, e ele ira lhe retornar um input do valor passado e um error.
A sintaxe e esta:
input, err := scan.Any[...]("text")
nos [...] voce passa o tipo que quer retornar e nos (...) o texto/message que quiser imprimir na tela/console. O resultado do desafio foi este:
package main
import (
"fmt"
"github.com/rickmvi/go/pkg/scan"
)
const (
PASSWORD string = "123456"
)
func main() {
attempts := 3
for attempts > 0 {
password, err := scan.Any[string]("Enter your password: ")
if err != nil {
panic(err)
}
if password == PASSWORD {
fmt.Println("Correct password!")
return
}
if attempts > 1 {
fmt.Println("Wrong password!")
attempts--
continue
}
fmt.Println("Blocked password!")
attempts--
}
}
para usar esse scan com type, e so importar o model do meu repositorio no github com:
go get github.com/rickmvi/go@latest
e importar no projeto o package scan:
import (
"github.com/rickmvi/go/pkg/scan"
)
Saida no terminal: