首页 > 后端开发 > Golang > 如何在 Go 中模拟 `getpasswd` 功能?

如何在 Go 中模拟 `getpasswd` 功能?

Barbara Streisand
发布: 2024-12-22 14:27:15
原创
887 人浏览过

How to Simulate `getpasswd` Functionality in Go?

如何在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板