小编典典

Go 中的 getpasswd 功能?

go

情况:

我想从stdin控制台获取密码条目-不回显用户键入的内容。有什么可以与getpasswdGo 中的功能相媲美的吗?

我试过的:

我尝试使用syscall.Read,但它与输入的内容相呼应。


阅读 268

收藏
2021-12-28

共2个答案

小编典典

您可以通过执行stty -echo关闭回显,然后stty echo在读入密码后重新打开来执行此操作

2021-12-28
小编典典

以下是完成它的最佳方法之一。首先term通过以下方式获取包裹go get golang.org/x/term

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
}

http://play.golang.org/p/l-9IP1mrhA

2021-12-28