Добавлено: несколько аргументов функции и замыкание

This commit is contained in:
Archer Fox
2025-03-17 23:51:02 +03:00
parent e6340bd24f
commit d1ddb2295d

View File

@@ -17,42 +17,41 @@ var menu = map[string]func(*account.VaultWithDb){
"4": deleteAccount, "4": deleteAccount,
} }
func main() { var menuVariants = []string{
// 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"))
Menu:
for {
variant := PromptData([]string{
"1. Создать аккаунт", "1. Создать аккаунт",
"2. Найти аккаунт по URL", "2. Найти аккаунт по URL",
"3. Найти аккаунт по логину", "3. Найти аккаунт по логину",
"4. Удалить аккаунт", "4. Удалить аккаунт",
"5. Выход", "5. Выход",
"Выберите вариант", "Выберите вариант",
}) }
func menuCounter() func() {
i := 0
return func() {
i++
fmt.Println("Вызов:", i)
}
}
func main() {
color.Blue("__Менеджер паролей__")
vault := account.NewVault(files.NewJsonDb("data.json"))
counter := menuCounter()
Menu:
for {
counter()
variant := PromptData(menuVariants...)
menuFunc := menu[variant] menuFunc := menu[variant]
if menuFunc == nil { if menuFunc == nil {
break Menu break Menu
} }
menuFunc(vault) menuFunc(vault)
// switch variant {
// case "1":
// createAccount(vault)
// case "2":
// findAccount(vault)
// case "3":
// deleteAccount(vault)
// default:
// break Menu
// }
} }
} }
func findAccountByUrl(vault *account.VaultWithDb) { func findAccountByUrl(vault *account.VaultWithDb) {
url := PromptData([]string{"Введите URL для поиска"}) url := PromptData("Введите URL для поиска")
// Анонимная функция как параметр // Анонимная функция как параметр
accounts := vault.FindAccounts(url, func(acc account.Account, str string) bool { accounts := vault.FindAccounts(url, func(acc account.Account, str string) bool {
return strings.Contains(acc.Url, str) return strings.Contains(acc.Url, str)
@@ -61,7 +60,7 @@ func findAccountByUrl(vault *account.VaultWithDb) {
} }
func findAccountByLogin(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 { accounts := vault.FindAccounts(login, func(acc account.Account, str string) bool {
return strings.Contains(acc.Login, str) return strings.Contains(acc.Login, str)
@@ -79,7 +78,7 @@ func outputResults(accounts *[]account.Account) {
} }
func deleteAccount(vault *account.VaultWithDb) { func deleteAccount(vault *account.VaultWithDb) {
url := PromptData([]string{"Введите URL для поиска: "}) url := PromptData("Введите URL для поиска: ")
isDeleted := vault.DeleteAccountByUrl(url) isDeleted := vault.DeleteAccountByUrl(url)
if isDeleted { if isDeleted {
color.Green("Удалено") color.Green("Удалено")
@@ -89,9 +88,9 @@ func deleteAccount(vault *account.VaultWithDb) {
} }
func createAccount(vault *account.VaultWithDb) { func createAccount(vault *account.VaultWithDb) {
login := PromptData([]string{"Введите логин: "}) login := PromptData("Введите логин: ")
password := PromptData([]string{"Введите пароль: "}) password := PromptData("Введите пароль: ")
url := PromptData([]string{"Введите URL: "}) url := PromptData("Введите URL: ")
myAccount, err := account.NewAccount(login, password, url) myAccount, err := account.NewAccount(login, password, url)
if err != nil { 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 { for i, line := range prompt {
if i == len(prompt)-1 { if i == len(prompt)-1 {
fmt.Printf("%v: ", line) fmt.Printf("%v: ", line)