Go で getpasswd 機能を実装するにはどうすればよいですか?
Go には、getpasswd に似た、読み取りを可能にする組み込み関数はありません。パスワードを端末にエコーせずに標準入力から取得します。ただし、同様の機能を実現するために使用できるテクニックがあります。
ベスト プラクティス ソリューション
推奨されるアプローチは、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認証情報
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 中国語 Web サイトの他の関連記事を参照してください。