package main
import (
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
const PASSWORD_LIMIT int = 500
rand.Seed(time.Now().UnixNano())
if len(os.Args) < 2 {
fmt.Println(getRandomString(64))
return
}
v, err := strconv.Atoi(os.Args[1])
if err != nil {
fmt.Printf("ERROR: invalid argument \"%s\"\n", os.Args[1])
os.Exit(1)
}
if v > PASSWORD_LIMIT {
fmt.Printf("ERROR: length must be less than %d\n", PASSWORD_LIMIT)
os.Exit(1)
}
fmt.Println(getRandomString(v))
}
func getRandomString(length int) string {
letters := "01234567890abcdefghijklmnopqrstuvwxyz"
generator := &strings.Builder{}
for i := 0; i < length; i++ {
generator.WriteByte(letters[rand.Intn(len(letters))])
}
return generator.String()
}
(1) 인자가 없는 경우
$ go run .
3rtrwt1oexfkelz0a348553k35fdbfdbp188lyzu1e7tmeygvkcetp41j4g6zxuo
$ go run .
4fnfr3p7bvgcmm850gmkq4qsckem2bf4d7oxg075otek4ccft24vgw5ghqy0rvhm
$ go run .
8xy9n7jatn4slr6m80n2c7cbetup063g0og6wk0plnxc6e0ehv91idh5ntk276wp
$ go run .
401bzq7zierfztpe23ho1yf7ng9s89es5wd247mirxrxyix4req8lxg7a0tzawf4
(2) 인자가 주어진 경우
$ go run . 0
$ go run . 1
b
$ go run . 2
44
$ go run . 3
41e
$ go run . 4
at93
(3) 잘못된 인자가 주어진 경우
$ go run . a
ERROR: invalid argument "a"
exit status 1
(4) 인자 값이 너무 큰 경우
$ go run . 90000000
ERROR: length must be less than 500
exit status 1
로 임의 비밀번호 생성 가능