71 lines
943 B
Go
71 lines
943 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
|
|
"gitlab.wow.st/gmp/rand"
|
|
)
|
|
|
|
func usage() {
|
|
fmt.Println("rand [-d | -l | -s] [num]")
|
|
os.Exit(-1)
|
|
}
|
|
|
|
func main() {
|
|
args := os.Args[1:]
|
|
var f func() (byte,error)
|
|
var n int
|
|
var err error
|
|
|
|
func() {
|
|
if len(args) == 0 {
|
|
f = rand.Char
|
|
n = 20
|
|
return
|
|
}
|
|
if len(args) >= 1 {
|
|
switch args[0] {
|
|
case "-d","--digits":
|
|
f = rand.Digit
|
|
case "-l","--letters":
|
|
f = rand.Letter
|
|
case "-s","--symbols":
|
|
f = rand.Symbol
|
|
default:
|
|
f = rand.Char
|
|
n, err = strconv.Atoi(args[0])
|
|
if err != nil {
|
|
usage()
|
|
}
|
|
}
|
|
}
|
|
switch len(args) {
|
|
case 1:
|
|
if n == 0 {
|
|
n = 20
|
|
}
|
|
case 2:
|
|
if n != 0 {
|
|
usage()
|
|
}
|
|
n, err = strconv.Atoi(args[1])
|
|
if err != nil {
|
|
usage()
|
|
}
|
|
default:
|
|
usage()
|
|
}
|
|
}()
|
|
|
|
s, err := rand.Slice(f,n)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(-1)
|
|
}
|
|
os.Stdout.Write(s)
|
|
os.Stdout.Write([]byte("\n"))
|
|
}
|
|
|