如何在 Go 中实现 getpasswd 功能?
Go 中没有内置类似 getpasswd 的函数可以让你读取来自 stdin 的密码,而不将其回显到终端。但是,您可以使用一些技术来实现类似的功能。
最佳实践解决方案
建议的方法是使用 Go 包的组合:
import ( "bufio" "fmt" "golang.org/x/term" )
第 1 步:阅读用户名
fmt.Print("Enter Username: ") username, _ := bufio.NewReader(os.Stdin).ReadString('\n')
第 2 步:读取密码(不带回显)
fmt.Print("Enter Password: ") bytePassword, _ := term.ReadPassword(int(syscall.Stdin))
term.ReadPassword() 函数采用文件描述符标准输入 (stdin) 并返回表示用户键入的密码的字节片段。它会抑制终端上的任何字符回显,以确保密码保密。
第 3 步:将字节转换为字符串
password := string(bytePassword)
第 4 步:返回凭据
return strings.TrimSpace(username), strings.TrimSpace(password)
示例代码:
package main import ( "bufio" "fmt" "os" "strings" "syscall" "golang.org/x/term" ) func main() { username, password, _ := credentials() fmt.Printf("Username: %s, Password: %s\n", username, password) } func credentials() (string, string, error) { reader := bufio.NewReader(os.Stdin) fmt.Print("Enter Username: ") username, err := reader.ReadString('\n') if err != nil { return "", "", err } fmt.Print("Enter Password: ") bytePassword, err := term.ReadPassword(int(syscall.Stdin)) if err != nil { return "", "", err } password := string(bytePassword) return strings.TrimSpace(username), strings.TrimSpace(password), nil }
以上是如何在 Go 中模拟 `getpasswd` 功能?的详细内容。更多信息请关注PHP中文网其他相关文章!