From d1ddb2295da8ddd719530b93d285d47544ec7dfe Mon Sep 17 00:00:00 2001 From: Archer Fox Date: Mon, 17 Mar 2025 23:51:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=D0=BD=D0=B5=D1=81=D0=BA=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=BA=D0=BE=20=D0=B0=D1=80=D0=B3=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B8=20=D0=B7=D0=B0=D0=BC=D1=8B=D0=BA=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go-demo-4/main.go | 55 +++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/go-demo-4/main.go b/go-demo-4/main.go index 7c27ac7..bc726f3 100644 --- a/go-demo-4/main.go +++ b/go-demo-4/main.go @@ -17,42 +17,41 @@ var menu = map[string]func(*account.VaultWithDb){ "4": deleteAccount, } +var menuVariants = []string{ + "1. Создать аккаунт", + "2. Найти аккаунт по URL", + "3. Найти аккаунт по логину", + "4. Удалить аккаунт", + "5. Выход", + "Выберите вариант", +} + +func menuCounter() func() { + i := 0 + return func() { + i++ + fmt.Println("Вызов:", i) + } +} + func main() { - // fmt.Println(output.Sum(100, 42)) - // fmt.Println(output.Sum(10.7, 3.14)) - // fmt.Println(output.Sum("Hello ", "world!")) color.Blue("__Менеджер паролей__") vault := account.NewVault(files.NewJsonDb("data.json")) + counter := menuCounter() Menu: for { - variant := PromptData([]string{ - "1. Создать аккаунт", - "2. Найти аккаунт по URL", - "3. Найти аккаунт по логину", - "4. Удалить аккаунт", - "5. Выход", - "Выберите вариант", - }) + counter() + variant := PromptData(menuVariants...) menuFunc := menu[variant] if menuFunc == nil { break Menu } menuFunc(vault) - // switch variant { - // case "1": - // createAccount(vault) - // case "2": - // findAccount(vault) - // case "3": - // deleteAccount(vault) - // default: - // break Menu - // } } } func findAccountByUrl(vault *account.VaultWithDb) { - url := PromptData([]string{"Введите URL для поиска"}) + url := PromptData("Введите URL для поиска") // Анонимная функция как параметр accounts := vault.FindAccounts(url, func(acc account.Account, str string) bool { return strings.Contains(acc.Url, str) @@ -61,7 +60,7 @@ func findAccountByUrl(vault *account.VaultWithDb) { } func findAccountByLogin(vault *account.VaultWithDb) { - login := PromptData([]string{"Введите Login для поиска"}) + login := PromptData("Введите Login для поиска") // Анонимная функция как параметр accounts := vault.FindAccounts(login, func(acc account.Account, str string) bool { return strings.Contains(acc.Login, str) @@ -79,7 +78,7 @@ func outputResults(accounts *[]account.Account) { } func deleteAccount(vault *account.VaultWithDb) { - url := PromptData([]string{"Введите URL для поиска: "}) + url := PromptData("Введите URL для поиска: ") isDeleted := vault.DeleteAccountByUrl(url) if isDeleted { color.Green("Удалено") @@ -89,9 +88,9 @@ func deleteAccount(vault *account.VaultWithDb) { } func createAccount(vault *account.VaultWithDb) { - login := PromptData([]string{"Введите логин: "}) - password := PromptData([]string{"Введите пароль: "}) - url := PromptData([]string{"Введите URL: "}) + login := PromptData("Введите логин: ") + password := PromptData("Введите пароль: ") + url := PromptData("Введите URL: ") myAccount, err := account.NewAccount(login, password, url) if err != nil { @@ -102,7 +101,7 @@ func createAccount(vault *account.VaultWithDb) { } // функция введения данных -func PromptData[T any](prompt []T) string { +func PromptData(prompt ...string) string { for i, line := range prompt { if i == len(prompt)-1 { fmt.Printf("%v: ", line)