Пришлось долго и упорно думать над этим названием?... теперь, когда мы разобрались с этим, давайте напишем чертов код :)
Насосы тормоза ? визгххх.... Давайте немного представим, что мы будем пытаться построить сегодня. Если название не было очевидным, мы будем создавать приложение 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.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3