>백엔드 개발 >Golang >Go에서 'getpasswd' 기능을 시뮬레이션하는 방법은 무엇입니까?

Go에서 'getpasswd' 기능을 시뮬레이션하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-22 14:27:15896검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.