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

This commit is contained in:
Archer Fox
2025-03-17 23:51:02 +03:00
parent e6340bd24f
commit dd4aca086d
2 changed files with 31 additions and 28 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
go-demo/app-1 go-demo/app-1
go-demo-4/data.json go-demo-4/data.json
go-demo-4/.env

View File

@@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"os"
"password/account" "password/account"
"password/files" "password/files"
"password/output" "password/output"
@@ -17,42 +18,43 @@ 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("__Менеджер паролей__")
res := os.Getenv("PWD")
fmt.Println(res)
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 +63,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 +81,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 +91,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 +104,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)