передача функции как аргумента другой функции

This commit is contained in:
Archer Fox
2025-03-16 23:19:15 +03:00
parent 0a2a722620
commit d9e8b18c52
3 changed files with 10 additions and 5 deletions

View File

@@ -21,7 +21,7 @@ type Account struct {
// метод вывода пароля // метод вывода пароля
func (acc *Account) Output() { func (acc *Account) Output() {
c := color.New(color.FgRed, color.Italic, color.Bold) c := color.New(color.FgRed, color.Italic, color.Bold)
c.Printf("password: %v, login: %v, URL: %v\n", acc.Password, acc.Login, acc.Url) c.Printf("password: %v\nlogin: %v\nURL: %v\n", acc.Password, acc.Login, acc.Url)
} }
// метод генерации пароля // метод генерации пароля

View File

@@ -73,10 +73,10 @@ func (vault *Vault) ToBytes() ([]byte, error) {
return file, nil return file, nil
} }
func (vault *VaultWithDb) FindAccountsByUrl(url string) []Account { func (vault *VaultWithDb) FindAccounts(str string, checker func(Account, string) bool) []Account {
var accounts []Account var accounts []Account
for _, account := range vault.Accounts { for _, account := range vault.Accounts {
isMatched := strings.Contains(account.Url, url) isMatched := checker(account, str)
if isMatched { if isMatched {
accounts = append(accounts, account) accounts = append(accounts, account)
} }

View File

@@ -5,6 +5,7 @@ import (
"password/account" "password/account"
"password/files" "password/files"
"password/output" "password/output"
"strings"
"github.com/fatih/color" "github.com/fatih/color"
) )
@@ -49,8 +50,8 @@ Menu:
} }
func findAccount(vault *account.VaultWithDb) { func findAccount(vault *account.VaultWithDb) {
url := PromptData([]string{"Введите URL для поиска: "}) url := PromptData([]string{"Введите URL для поиска"})
accounts := vault.FindAccountsByUrl(url) accounts := vault.FindAccounts(url, checkUrl)
if len(accounts) == 0 { if len(accounts) == 0 {
color.Red("Аккаунт не найден!") color.Red("Аккаунт не найден!")
} }
@@ -59,6 +60,10 @@ func findAccount(vault *account.VaultWithDb) {
} }
} }
func checkUrl(acc account.Account, str string) bool {
return strings.Contains(acc.Url, str)
}
func deleteAccount(vault *account.VaultWithDb) { func deleteAccount(vault *account.VaultWithDb) {
url := PromptData([]string{"Введите URL для поиска: "}) url := PromptData([]string{"Введите URL для поиска: "})
isDeleted := vault.DeleteAccountByUrl(url) isDeleted := vault.DeleteAccountByUrl(url)