«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Написание CLI-приложения для проверки скорости набора текста на Golang

Написание CLI-приложения для проверки скорости набора текста на Golang

Опубликовано 8 ноября 2024 г.
Просматривать:372

Writing a Typing Speed Test CLI Application in Golang

Пришлось долго и упорно думать над этим названием?... теперь, когда мы разобрались с этим, давайте напишем чертов код :)

Насосы тормоза ? визгххх.... Давайте немного представим, что мы будем пытаться построить сегодня. Если название не было очевидным, мы будем создавать приложение CLI, которое рассчитывает вашу скорость набора текста на golang — хотя вы можете буквально создать то же приложение, следуя тем же методам, на любом языке программирования по вашему выбору.

Теперь давайте напишем код?

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",
}

В наш файл main.go мы импортируем пакеты, которые нам понадобятся для написания нашей логики. Мы также создаем фрагмент предложений. Не стесняйтесь добавлять еще кучу.

// 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) 



Затем мы создадим пару функций, которые нам пригодятся при написании логики нашего приложения.

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")
        }
    }
}

В нашей основной функции мы пишем приветственное сообщение на терминал и создаем бесконечный цикл для запуска нашей программы. Затем мы печатаем подтверждающее сообщение на стандартный вывод терминала с возможностью выхода из программы. Если вы решите продолжить, предложение выбирается из фрагмента ранее написанных предложений и отображается в терминале сразу после записи времени начала. Мы собираем вводимые пользователем данные и рассчитываем время, скорость, точность и аккуратность, а затем отображаем результаты обратно на терминал. Бесконечный цикл сбрасывается, и приложение запускается снова, пока вы не выйдете из программы.

Вуаля!!! Мы только что написали нашу первую программу на golang.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/hueyemma769/writing-a-typing-speed-test-cli-application-in-golang-371l?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3