var reader = bufio.NewReader(os.Stdin) // GetUserCredentials 获取用户输入的账号密码 func GetUserCredentials() (string, string) { var username, password string fmt.Print("请输入用户名:") userInput, _ := reader.ReadString('\n') username = strings.TrimSpace(userInput) fmt.Print("请输入密码:") passwordInput, _ := reader.ReadString('\n') password = strings.TrimSpace(passwordInput) return strings.TrimSpace(username), strings.TrimSpace(password) } // MD5Hash 对密码进行 MD5 加密 func MD5Hash(password string) string { hash := md5.Sum([]byte(password)) return hex.EncodeToString(hash[:]) } // UserLogin 处理用户登录 func UserLogin(username, password string) bool { // 假设存储的用户名和密码都已经进行了 MD5 加密 if username == "admin" && password == "21232f297a57a5a743894a0e4a801fc3" { return true } return false } func main() { username, password := GetUserCredentials() if UserLogin(username, password) { fmt.Println("登录成功") // 用户登录成功,继续执行其他逻辑 } else { fmt.Println("用户名或密码错误") // 用户登录失败,进行错误处理 } }
时间: 2024-04-09 12:31:01 浏览: 14
这段代码是一个简单的用户登录功能,主要包括获取用户输入的账号密码、对密码进行MD5加密、以及处理用户登录的逻辑。
在`GetUserCredentials`函数中,通过`bufio.NewReader(os.Stdin)`创建一个读取器,然后使用`reader.ReadString('\n')`逐行读取用户输入的账号密码,并通过`strings.TrimSpace`去除输入中的空格和换行符,最后返回账号和密码。
在`MD5Hash`函数中,使用`md5.Sum`对密码进行MD5加密,然后使用`hex.EncodeToString`将加密后的结果转换为字符串,并返回。
在`UserLogin`函数中,假设用户名为"admin",密码为"21232f297a57a5a743894a0e4a801fc3",这里的密码已经经过MD5加密。函数会将输入的用户名和密码与预设的用户名和密码进行比较,如果匹配则返回`true`,否则返回`false`。
在`main`函数中,首先调用`GetUserCredentials`获取用户输入的账号密码,然后通过调用`UserLogin`函数进行登录验证。如果登录成功,则输出"登录成功",否则输出"用户名或密码错误"。
请注意,这段代码只是一个示例,并没有涉及真实的用户验证和安全性措施,请勿直接使用于实际产品中。
相关问题
bufio.NewReader 如何读取全部字符
使用 bufio.NewReader 可以读取 io.Reader 中的所有字符。可以通过以下方式读取全部字符:
```
r := bufio.NewReader(file)
// ReadString('\n') reads until the first occurrence of the separator.
// In this case, it reads the entire file because '\n' is not in the file.
content, _ := r.ReadString('\n')
```
也可以使用 ReadBytes 或者 ReadString,具体看需求。
```
content, _ := r.ReadBytes('\n')
content, _ := r.ReadString('\x00')
```
不过, 如果知道文件大小 可以使用ReadFull 取代, 效率更高
```
content := make([]byte, fileSize)
r.ReadFull(content)
```
package main 2. 3. import ( 4. "bufio" 5. "fmt" 6. "os" 7. "io" 8. ) 9. 10. func main() { 11. inputFile, _ := os.Open("goprogram") 12. outputFile, _ := os.OpenFile("goprogramT", os.O_WRONLY|os.O_CREATE, 0666) 13. defer inputFile.Close() 14. defer outputFile.Close() 15. inputReader := bufio.NewReader(inputFile) 16. outputWriter := bufio.NewWriter(outputFile) 17. for { 18. inputString, _, readerError := inputReader.ReadLine() 19. if readerError == io.EOF { 20. fmt.Println("EOF") 21. return 22. } 23. outputString := string(inputString[2:5]) + "\r\n" 24. _, err := outputWriter.WriteString(outputString) 25. if err != nil { 26. fmt.Println(err) 27. return 28. } 29. } 30. fmt.Println("Conversion done") }
这是一段 Go 语言代码,目的是将 goprogram 中的一部分内容写入到 goprogramT 中。具体实现是,用 os 包打开输入和输出文件,利用 bufio 包读取输入和写入输出,主要的计算过程在 for 循环中完成,每读取一行输入就将其中的第 2 至 4 个字符写入输出文件。最后输出 Conversion done 表示转换完成。