必须认真考虑这个标题吗?...现在我们已经解决了这个问题,让我们编写一些该死的代码:)
泵制动?尖叫……让我们对今天要尝试构建的内容做一些介绍。如果标题不明显,我们将构建一个 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