From a27a69244f8d59238cde38d8440ad3f9b2d3986a Mon Sep 17 00:00:00 2001 From: Vitaliy Turov Date: Sat, 15 Feb 2025 11:28:06 +0300 Subject: [PATCH] feature/homework_lection_one (#2) Reviewed-on: https://git.gocommunity.ru/walleri1/go_winter_work_2025/pulls/2 Co-authored-by: Vitaliy Turov Co-committed-by: Vitaliy Turov --- go/cmd/main.go | 23 ---------- go/go.mod | 3 -- go/homework_one/cmd/main.go | 60 +++++++++++++++++++++++++ go/homework_one/go.mod | 10 +++++ go/homework_one/internal/input/input.go | 52 +++++++++++++++++++++ go/pkg/cycle.go | 11 ----- 6 files changed, 122 insertions(+), 37 deletions(-) delete mode 100644 go/cmd/main.go delete mode 100644 go/go.mod create mode 100644 go/homework_one/cmd/main.go create mode 100644 go/homework_one/go.mod create mode 100644 go/homework_one/internal/input/input.go delete mode 100644 go/pkg/cycle.go diff --git a/go/cmd/main.go b/go/cmd/main.go deleted file mode 100644 index fc61feb..0000000 --- a/go/cmd/main.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "fmt" - time "time" - - cycle "train_golang/pkg" -) - -func add(a, b int) { - fmt.Println("Sum = ", a+b) -} - -func sub(a, b int) { - fmt.Println("Sub = ", a-b) -} - -func main() { - go add(5, 6) - go sub(7, 9) - cycle.SimpleForCycle() - time.Sleep(1 * time.Second) -} diff --git a/go/go.mod b/go/go.mod deleted file mode 100644 index 31322a5..0000000 --- a/go/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module train_golang - -go 1.23.6 diff --git a/go/homework_one/cmd/main.go b/go/homework_one/cmd/main.go new file mode 100644 index 0000000..6149404 --- /dev/null +++ b/go/homework_one/cmd/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "fmt" + + "homework_one/internal/input" +) + +func main() { + for { + + number_one, err := input.GetNumber("Введите первое число:") + if err != nil { + fmt.Println( + "Некорректное число. Пожалуйста, введите числовое значение.", + ) + continue + } + + operator := input.GetOperator() + + number_two, err := input.GetNumber("Введите второе число:") + if err != nil { + fmt.Println( + "Некорректное число. Пожалуйста, введите числовое значение.", + ) + continue + } + + var result float64 + switch operator { + case "+": + result = number_one + number_two + case "-": + result = number_one - number_two + case "*": + result = number_one * number_two + case "/": + if number_two == 0 { + fmt.Println("Ошибка: деление на ноль невозможно") + continue + } + result = number_one / number_two + default: + fmt.Println("Неизвестный оператор") + continue + } + fmt.Printf( + "Результат: %F %s %F = %F\n", + number_one, + operator, + number_two, + result, + ) + + fmt.Println("Press the Enter Key to stop anytime") + fmt.Scanln() + + } +} diff --git a/go/homework_one/go.mod b/go/homework_one/go.mod new file mode 100644 index 0000000..3aaadc2 --- /dev/null +++ b/go/homework_one/go.mod @@ -0,0 +1,10 @@ +module homework_one + +go 1.23.6 + +require github.com/manifoldco/promptui v0.9.0 + +require ( + github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect + golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b // indirect +) diff --git a/go/homework_one/internal/input/input.go b/go/homework_one/internal/input/input.go new file mode 100644 index 0000000..19ca0c5 --- /dev/null +++ b/go/homework_one/internal/input/input.go @@ -0,0 +1,52 @@ +package input + +import ( + "errors" + "fmt" + "strconv" + + p "github.com/manifoldco/promptui" +) + +// GetNumber получение числового ввода пользователя +func GetNumber(message string) (float64, error) { + validate := func(input string) error { + _, err := strconv.ParseFloat(input, 64) + if err != nil { + return errors.New( + "Некорректное число. Пожалуйста, введите числовое значение.", + ) + } + return nil + } + + prompt := p.Prompt{ + Label: message, + Validate: validate, + } + + result, err := prompt.Run() + if err != nil { + fmt.Printf("Prompt failed %v\n", err) + return 0, err + } + + number, _ := strconv.ParseFloat(result, 64) + return number, nil +} + +// GetOperator получение оператора +func GetOperator() string { + prompt := p.Select{ + Label: "Выберите операцию (+, -, *, /):", + Items: []string{"+", "-", "*", "/"}, + } + + _, result, err := prompt.Run() + if err != nil { + fmt.Printf("Prompt failed %v\n", err) + return "" + } + + return result +} diff --git a/go/pkg/cycle.go b/go/pkg/cycle.go deleted file mode 100644 index ae74749..0000000 --- a/go/pkg/cycle.go +++ /dev/null @@ -1,11 +0,0 @@ -package cycle - -import ( - fmt "fmt" -) - -func SimpleForCycle() { - for i := 0; i < 100; i++ { - fmt.Println("Iter: ", i) - } -}