그 제목에 대해 오랫동안 고민해야 했나요?... 이제 그 문제를 해결했으니 멋진 코드를 작성해 보겠습니다. :)
펌프 브레이크 ? 삐걱삐걱.... 오늘 우리가 만들려고 하는 것에 대해 약간 소개하겠습니다. 제목이 명확하지 않은 경우 golang에서 타이핑 속도를 계산하는 CLI 애플리케이션을 구축할 것입니다. 물론 선택한 프로그래밍 언어에서 동일한 기술을 사용하여 문자 그대로 동일한 애플리케이션을 구축할 수도 있습니다.
이제 코딩해볼까요?
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) < len(source) { invalid++ source = source[:len(target)] } for i := 0; i < len(target); i++ { if target[i] == source[i] { valid++ } if target[i] != source[i] { invalid++ } } return valid, invalid } // Calculates the degree of correctness func precision(pos, fal int) int { return pos / (pos + fal) * 100 } // Self explanatory - don't stress me ? func timeElapsed(start, end time.Time) float64 { return end.Sub(start).Seconds() } // Refer to the last comment func accuracy(correct, total int) int { return (correct / total) * 100 } // ? func Speed(chars int, secs float64) float64 { return (float64(chars) / secs) * 12 }
그런 다음 애플리케이션 로직을 작성할 때 유용하게 사용할 몇 가지 함수를 만듭니다.
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") _ = <-timer.C sentence := Choice(sentences) fmt.Printf("%s\n", sentence) start := time.Now() response, err := Input(">> ") 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") } } }
주 함수에서는 터미널에 환영 메시지를 쓰고 무한 루프를 만들어 프로그램을 실행합니다. 그런 다음 프로그램을 종료하는 옵션과 함께 확인 메시지를 stdout(터미널)에 인쇄합니다. 계속하기를 선택하면 이전에 작성된 문장 조각에서 문장이 선택되어 시작 시간이 기록된 직후 터미널에 표시됩니다. 우리는 사용자 입력을 수집하고 시간, 속도, 정밀도 및 정확도를 계산한 다음 결과를 다시 터미널에 표시합니다. 무한 루프가 재설정되고 프로그램을 선택 해제할 때까지 애플리케이션이 다시 실행됩니다.
짜잔!!! 우리는 golang으로 첫 번째 프로그램을 작성했습니다.
위 내용은 Golang에서 타이핑 속도 테스트 CLI 애플리케이션 작성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!