ホームページ >バックエンド開発 >Golang >Go で「getpasswd」機能をシミュレートするにはどうすればよいですか?

Go で「getpasswd」機能をシミュレートするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-22 14:27:15885ブラウズ

How to Simulate `getpasswd` Functionality in Go?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。