将os.Stdin转换为[] byte

时间:2018-06-09 10:57:17

标签: go encryption input type-conversion chat

我正在尝试在golang中使用端到端加密实现一个小型聊天服务器。启动服务器groupby和客户端https://github.com/adonovan/gopl.io/tree/master/ch8/chat的示例我偶然发现https://github.com/adonovan/gopl.io/blob/master/ch8/netcat3/netcat.go在Go中加密和解密。

加密功能:

   ciphertext := encrypt([]byte(os.Stdin), "password")
    mustCopy(conn, ciphertext)
    conn.Close()

在func main()中:

bytes.NewBuffer([]byte(os.Stdin))

os.Stdin是os.file,而它需要作为[] byte。解决方案应该是io.Reader或通过缓冲区,但我找不到可行的解决方案。

我试过

reader := bytes.NewReader(os.Stdin)

{{1}}

任何输入都非常受欢迎。对不起,如果我没有在这里看到明显的问题/解决方案,因为我很新。

1 个答案:

答案 0 :(得分:3)

os.Stdinio.Reader。您无法将其转换为[]byte,但您可以从中读取,以及从中读取的数据,可以将其读入[]byte

由于从os.Stdin读取的许多终端按行提供数据,因此您应该从中读取完整的一行。从os.Stdin读取可能会阻止,直到有完整的行。

为此你有很多可能性,一个是使用bufio.Scanner

这是你可以做到的:

scanner := bufio.NewScanner(os.Stdin)
if !scanner.Scan() {
    log.Printf("Failed to read: %v", scanner.Err())
    return
}
line := scanner.Bytes() // line is of type []byte, exactly what you need