歡迎回到我們用 Go 建立密碼管理器的旅程!在第二部分中,我們將探討自初次提交以來我們所取得的進展。我們添加了新功能,改進了程式碼結構並實施了測試。讓我們潛入吧!
您會注意到的第一個變化是改進的專案結構。我們遵循 Go 的最佳實踐,將程式碼分成多個檔案和套件:
dost/ . ├── LICENSE ├── README.md ├── go.mod ├── go.sum ├── internal │ ├── internal_test.go │ └── passgen.go └── main.go
隨著我們專案的發展,這種結構可以實現更好的組織和可維護性。
我們顯著改進了 CLI,使其更加靈活且用戶友好。這是我們 main.go 的片段:
func main() { generateCmd := flag.NewFlagSet("generate", flag.ExitOnError) flag.Parse() switch os.Args[1] { case "generate": internal.Generate(generateCmd) } }
此設定允許使用子命令,目前支援產生命令。使用者現在可以像這樣與我們的工具互動:
go run main.go generate email/reachme@example.com 15
我們新增了自訂密碼產生的選項。使用者現在可以指定密碼長度並選擇排除特殊字元:
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) }
此功能允許使用者使用 -n 等標誌來排除符號,使用 -c 將密碼複製到剪貼簿而不是顯示它。
我們改進了密碼產生功能以處理新的自訂選項:
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 1db162440159d2ca0a526bc01c548705 0 { t.Errorf("Special character was missing in %d / 10000 instances.", splCharMissing) } }
這些測試檢查密碼長度是否正確以及是否包含特殊字元。有趣的是,我們的特殊字元測試揭示了一個需要改進的地方:在 10,000 個生成的密碼中,有 234 個不包含特殊字元。這為我們下一步的改進提供了明確的方向。
雖然我們取得了重大進展,但仍有改進的空間:
請繼續關注我們系列的下一部分,我們將解決這些挑戰並繼續改進我們的密碼管理器!
請記住,完整的原始碼可以在 GitHub 上找到。請隨意克隆、分叉並為該專案做出貢獻。隨時歡迎您的回饋和貢獻!
祝您編碼愉快,並保持安全! ??
dost 是一個用 Go 寫的 CLI 密碼管理器。
靈感來自(通行證)[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
以上是在 Go 中建立密碼管理器:第 2 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!