diff --git a/go-demo-4/main.go b/go-demo-4/main.go index 6ca4d26..e0ff1a7 100644 --- a/go-demo-4/main.go +++ b/go-demo-4/main.go @@ -1,20 +1,106 @@ package main import ( + "errors" "fmt" + "math/rand/v2" + "net/url" + "time" ) -func main() { - a := [4]int{1, 2, 3, 4} - reverse(&a) - fmt.Println(a) - - var n *int - fmt.Println(*n) +type account struct { + login string + password string + url string } -func reverse(arr *[4]int) { - for idx, val := range *arr { - (*arr)[len(arr)-1-idx] = val +type accountWithTimeStamp struct { + createdAt time.Time + updatedAt time.Time + account +} + +// метод вывода пароля +func (acc account) outputPassword() { + fmt.Println(acc.login, acc.password, acc.url) +} + +func (acc accountWithTimeStamp) outputPassword() { + fmt.Println(acc.login, acc.password, acc.url, acc.createdAt, acc.updatedAt) +} + +// метод генерации пароля +func (acc *account) generatePassword(n int) { + res := make([]rune, n) + for i := range res { + res[i] = letterRunes[rand.IntN(len(letterRunes))] } + acc.password = string(res) +} + +// Создание аккаунта с таймстамп +func newAccountWithTimeStamp(login, password, urlString string) (*accountWithTimeStamp, error) { + _, err := url.ParseRequestURI(urlString) + if err != nil { + return nil, errors.New("INVALID_URL") + } + if login == "" { + return nil, errors.New("INVALID_LOGIN") + } + newAcc := &accountWithTimeStamp{ + createdAt: time.Now(), + updatedAt: time.Now(), + account: account{ + login: login, + password: password, + url: urlString, + }, + } + if password == "" { + newAcc.generatePassword(18) + } + return newAcc, nil +} + +// создание аккаунта +/* func newAccount(login, password, urlString string) (*account, error) { + _, err := url.ParseRequestURI(urlString) + if err != nil { + return nil, errors.New("INVALID_URL") + } + if login == "" { + return nil, errors.New("INVALID_LOGIN") + } + newAcc := &account{ + login: login, + password: password, + url: urlString, + } + if password == "" { + newAcc.generatePassword(18) + } + return newAcc, nil +} */ + +var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGIJKLMNOPQRSTUVWXYZ1234567890-*!?()#$%&") + +func main() { + login := promptData("Введите логин: ") + password := promptData("Введите пароль: ") + url := promptData("Введите URL: ") + + myAccount, err := newAccountWithTimeStamp(login, password, url) + if err != nil { + fmt.Println("ОШИБКА: Неверный формат URL") + return + } + myAccount.outputPassword() +} + +// функция введения данных +func promptData(prompt string) string { + fmt.Print(prompt) + var res string + fmt.Scanln(&res) + return res } diff --git a/go-demo-4/reverseArr/main.go b/go-demo-4/reverseArr/main.go new file mode 100644 index 0000000..7543cee --- /dev/null +++ b/go-demo-4/reverseArr/main.go @@ -0,0 +1,20 @@ +package main + +import ( + "fmt" +) + +func main() { + a := [4]int{1, 2, 3, 4} + reverse(&a) + fmt.Println(a) + + // var n *int + // fmt.Println(*n) +} + +func reverse(arr *[4]int) { + for idx, val := range *arr { + (*arr)[len(arr)-1-idx] = val + } +}