Rumah >pembangunan bahagian belakang >Golang >Membina Pengurus Kata Laluan dalam Go: Bahagian 2
Selamat datang kembali ke perjalanan kami membina pengurus kata laluan dalam Go! Dalam ansuran kedua ini, kami akan meneroka kemajuan yang telah kami buat sejak komitmen awal kami. Kami telah menambah ciri baharu, menambah baik struktur kod dan melaksanakan ujian. Jom terjun!
Salah satu perubahan pertama yang anda akan perhatikan ialah struktur projek yang dipertingkatkan. Kami telah mengasingkan kod kami kepada berbilang fail dan pakej, mengikut amalan terbaik Go:
dost/ . ├── LICENSE ├── README.md ├── go.mod ├── go.sum ├── internal │ ├── internal_test.go │ └── passgen.go └── main.go
Struktur ini membolehkan organisasi dan kebolehselenggaraan yang lebih baik semasa projek kami berkembang.
Kami telah meningkatkan CLI kami dengan ketara, menjadikannya lebih fleksibel dan mesra pengguna. Berikut ialah coretan daripada main.go kami:
func main() { generateCmd := flag.NewFlagSet("generate", flag.ExitOnError) flag.Parse() switch os.Args[1] { case "generate": internal.Generate(generateCmd) } }
Persediaan ini membenarkan subperintah, yang kini menyokong perintah jana. Pengguna kini boleh berinteraksi dengan alat kami seperti ini:
go run main.go generate email/reachme@example.com 15
Kami telah menambah pilihan untuk menyesuaikan penjanaan kata laluan. Pengguna kini boleh menentukan panjang kata laluan dan memilih untuk mengecualikan aksara khas:
func Generate(generateFlags *flag.FlagSet) { generateFlags.BoolVar(&noSymbols, "n", false, "Skip symbols while generating password") generateFlags.BoolVar(©ToClipBoard, "c", false, "Copy to clipboard.") generateFlags.Parse(os.Args[2:]) passwordLength := 25 // ... (code to parse custom length) password, err := generatePassword(passwordLength, noSymbols) // ... (code to handle password output) }
Fungsi ini membolehkan pengguna menggunakan bendera seperti -n untuk mengecualikan simbol dan -c untuk menyalin kata laluan ke papan keratan dan bukannya memaparkannya.
Kami telah memperhalusi fungsi penjanaan kata laluan kami untuk mengendalikan pilihan penyesuaian baharu:
func generatePassword(length int, noSymbols bool) (string, error) { const ( uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" lowercaseLetters = "abcdefghijklmnopqrstuvwxyz" digits = "0123456789" specialChars = "!@#$%^&*()-_=+[]{}|;:'\",.a8093152e673feb7aba1828c43532094/?" ) allChars := uppercaseLetters + lowercaseLetters + digits if !noSymbols { allChars += specialChars } var password string for i := 0; i 97cb5cf6a5836bd29d884176c944fa16 0 { t.Errorf("Special character was missing in %d / 10000 instances.", splCharMissing) } }
Ujian ini menyemak panjang kata laluan yang betul dan kemasukan aksara khas. Menariknya, ujian aksara khas kami mendedahkan kawasan untuk penambahbaikan: dalam 10,000 kata laluan yang dijana, 234 tidak mengandungi aksara khas. Ini memberi kita hala tuju yang jelas untuk pemurnian seterusnya.
Walaupun kami telah mencapai kemajuan yang ketara, masih ada ruang untuk penambahbaikan:
Nantikan bahagian seterusnya siri kami, di mana kami akan menangani cabaran ini dan terus mengembangkan pengurus kata laluan kami!
Ingat, kod sumber penuh tersedia di GitHub. Jangan ragu untuk mengklon, membuat garpu dan menyumbang kepada projek itu. Maklum balas dan sumbangan anda sentiasa dialu-alukan!
Selamat pengekodan, dan kekal selamat! ??
dost ialah pengurus kata laluan CLI yang ditulis dalam Go.
Diinspirasikan oleh (Pass)[https://www.passwordstore.org/]
> go build -o dost main.go
Generating password:
> ./dost generate -c email/vema@example.com Copied to clipboard! ✅
Avoid symbols for generating passwords:
> ./dost generate -n email/vema@example.com Generated Password: E2UST}^{Ac[Fb&D|cD%;Eij>H
MIT
Atas ialah kandungan terperinci Membina Pengurus Kata Laluan dalam Go: Bahagian 2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!