bufio

入出力をバイト単位や行単位で行いたいときには bufio パッケージの関数が便利。リーダーやライターを作ってから、入出力関数を呼び出す。
バイト単位には、ReadByteWriteByte がいい。

10行目と11行目でリーダーとライターを作って、それを使っている。

^o^ > go build echo1.go

^o^ > echo1.exe < echo1.go
package main

import (
        "os"
        "io"
        "bufio"
)

func main() {
        r := bufio.NewReader(os.Stdin)
        w := bufio.NewWriter(os.Stdout)
        for {
                c, err := r.ReadByte()
                if err == io.EOF { break }
                w.WriteByte(c)
                if c == '\n' { w.Flush() }
        }
        w.Flush()
}

もうひとつ、行単位で処理するには、同じリーダー、ライターの ReadStringWriteString が使える。

^o^ > go build echo2.go

^o^ > echo2.exe < echo2.go
package main

import (
        "os"
        "io"
        "bufio"
)

func main() {
        r := bufio.NewReader(os.Stdin)
        w := bufio.NewWriter(os.Stdout)
        for {
                s, err := r.ReadString('\n')
                if err == io.EOF { break }
                w.WriteString(s)
                w.Flush()
        }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です