Go语言学习笔记十三--Go语言练习 go语言实现一个密码生成工具

go语言实现一个密码生成工具,支持以下功能

代码讲解地址:https://www.bilibili.com/video/BV1v5411W7t3?p=52

 1 package main
 2 
 3 import (
 4     "flag"
 5     "fmt"
 6     "math/rand"
 7     "time"
 8 )
 9 
10 var (
11     length int
12     charset string
13 )
14 //字符集常量
15 const (
16     NumStr = "0123456789"
17     CharStr = "abcdefglijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
18     SpecStr = "!@#$%^&*()[]_+-=,."
19 )
20 
21 func parseArgs(){
22     //参数分别表示 读取到达参数存到length 选项名称l 长度16 解释如果输入错误会弹出列表
23     flag.IntVar(&length,"l",16,"-l 生成密码的长度")
24     flag.StringVar(&charset,"t","num",
25         `-t 制定密码生成的字符集,
26                 num:只使用数字【1-9】,
27                 char:只使用英文字母【A-Z,a-z】,
28                 mix:使用数字和字母,
29                 advance:使用数字字母和特殊字符
30                 `)
31     flag.Parse()
32 }
33 
34 func generatePassword() string{
35     var passwd []byte = make([]byte, length, length)
36     var sourceStr string = ""
37     if charset == "num" {
38         sourceStr = NumStr
39     } else if charset == "char" {
40         sourceStr = CharStr
41     } else if charset == "mix" {
42         sourceStr = fmt.Sprintf("%s%s",NumStr,CharStr)
43     } else if charset == "advance" {
44         sourceStr = fmt.Sprintf("%s%s%s",NumStr,CharStr,SpecStr)
45     } else {
46         sourceStr = NumStr
47     }
48     //随机数生成密码
49     for i := 0; i < length; i++ {
50         index := rand.Intn(len(sourceStr))
51         passwd[i] = sourceStr[index]
52     }
53     //fmt.Println(sourceStr)
54     return string(passwd)
55 }
56 func main() {
57     rand.Seed(time.Now().Unix())
58     parseArgs()
59     //fmt.Println("length:", length)
60     //fmt.Println("charset:", charset)
61     passwd := generatePassword()
62     fmt.Println(passwd)
63 }

代码运行命令 

//-l 表示密码长度为32位 
//-t 表示密码方式为num

go run args.go -l 32 -t num

go run args.go -l 64 -t mix
原文地址:https://www.cnblogs.com/xwxz/p/13322927.html