【Go】密码生成器
package main import ( "flag" "fmt" "math/rand" "strings" "time" ) const ( NUM string = "0123456789" CHAR string = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" SPEC string = "~!@#$%^&*?()<>,.;:" ) var ( length int typeset string ) func parseArgs() { flag.IntVar(&length, "l", 16, "指定密码长度") flag.StringVar(&typeset, "t", "char", `指定密码字符集 num: 数字集 char: 字母集 mix: 数字和字母集 advance: 数字和字母和特殊字符集`) flag.Parse() } func strJion(stragrs ...string) string { var str strings.Builder for _, v := range stragrs { str.WriteString(v) } newStr := str.String() return newStr } func generatePwd() string { var pwd []byte = make([]byte, length, length) var sourceSet string switch typeset { case "num": sourceSet = strJion(NUM) case "char": sourceSet = strJion(CHAR) case "mix": sourceSet = strJion(NUM, CHAR) case "advance": sourceSet = strJion(NUM, CHAR, SPEC) default: sourceSet = CHAR } //fmt.Printf("%v\n", sourceSet) for i := 0; i < length; i++ { pwd[i] = sourceSet[rand.Intn(len(sourceSet))] } return string(pwd) } func main() { rand.Seed(time.Now().UnixNano()) parseArgs() //fmt.Printf("%d, %s\n", length, typeset) p := generatePwd() fmt.Println(p) }