Tive que pensar muito sobre esse título?... agora que já resolvemos isso, vamos escrever um código maldito :)
Bombas de freio? screechhhhh.... Vamos fazer uma pequena introdução sobre o que tentaremos construir hoje. Caso o título não seja óbvio, estaremos construindo um aplicativo CLI que calcula sua velocidade de digitação em golang - embora você possa literalmente construir o mesmo aplicativo, seguindo as mesmas técnicas em qualquer linguagem de programação de sua escolha.
Agora, vamos codificar ?
package main import ( "bufio" "fmt" "log" "math/rand" "os" "strings" "time" ) var sentences = []string{ "There are 60 minutes in an hour, 24 hours in a day and 7 days in a week", "Nelson Mandela is one of the most renowned freedom fighters Africa has ever produced", "Nigeria is the most populous black nation in the world", "Peter Jackson's Lord of the rings is the greatest film of all time", }
Em nosso arquivo main.go, importamos os pacotes que precisaremos para escrever nossa lógica. Também criamos uma fatia de frases. Sinta-se à vontade para adicionar mais.
// A generic helper function that randomly selects an item from a slice func Choice[T any](ts []T) T { return ts[rand.Intn(len(ts))] } // Prompts and collects user input from the terminal func Input(prompt string) (string, error) { fmt.Print(prompt) r := bufio.NewReader(os.Stdin) line, err := r.ReadString('\n') if err != nil { return "", err } return strings.Trim(line, "\n\r\t"), nil } // Compares two strings and keeps track of the characters // that match and those that don't func CompareChars(target, source string) (int, int) { var valid, invalid int // typed some of the words // resize target to length of source if len(target) > len(source) { diff := len(target) - len(source) invalid = diff target = target[:len(source)] } // typed more words than required // resize source to length of target if len(target)Em seguida, criamos algumas funções que serão úteis quando escrevermos a lógica do nosso aplicativo.
func main() { fmt.Println("Welcome to Go-Speed") fmt.Println("-------------------") for { fmt.Printf("\nWould you like to continue? (y/N)\n\n") choice, err := Input(">> ") if err != nil { log.Fatalf("could not read value: %v", err) } if choice == "y" { fmt.Println("Starting Game...") timer := time.NewTimer(time.Second) fmt.Print("\nBEGIN TYPING NOW!!!\n\n") _ = > ") if err != nil { log.Fatalf("could not read value: %v", err) } elasped := timeElapsed(start, time.Now()) valid, invalid := CompareChars(sentence, response) fmt.Print("\nResult!\n") fmt.Println("-------") fmt.Printf("Correct Characters: %d\nIncorrect Characters: %d\n", valid, invalid) fmt.Printf("Accuracy: %d%%\n", accuracy(valid, len(sentence))) fmt.Printf("Precision: %d%%\n", precision(valid, invalid)) fmt.Printf("Speed: %.1fwpm\n", Speed(len(sentence), elasped)) fmt.Printf("Time Elasped: %.2fsec\n", elasped) } if choice == "N" { fmt.Println("Quiting Game...") break } if choice != "N" && choice != "y" { fmt.Println("Invalid Option") } } }Em nossa função principal, escrevemos uma mensagem de boas-vindas no terminal e criamos um loop infinito para executar nosso programa. Em seguida, imprimimos uma mensagem de confirmação em stdout - terminal - com a opção de encerrar o programa. Se você optar por continuar, uma frase será selecionada da fatia de frases escritas anteriormente e exibida no terminal logo após o horário de início ser registrado. Coletamos a entrada do usuário e calculamos o tempo, a velocidade, a precisão e a exatidão e, em seguida, exibimos os resultados de volta ao terminal. O loop infinito é redefinido e o aplicativo é executado novamente até você cancelar o programa.
Voilá!!! Acabamos de escrever nosso primeiro programa em golang.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3