cat

ファイル入出力の練習に cat コマンドを写経してみた。
まずひとつめ、bufioReadString 関数で1行ずつ処理。

package main

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

func cat(filename string) {
    file, err := os.Open(filename)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
    rd := bufio.NewReader(file)
    for {
        s, err := rd.ReadString('\n')
        if err == io.EOF { break }
        fmt.Print(s)
    }
    file.Close()
}

func main() {
    for _, name := range os.Args[1:] {
        cat(name)
    }
}
^o^ > go build cat.go

^o^ > .\cat cat.go cat2.go
package main

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

func cat(filename string) {
        file, err := os.Open(filename)
        if err != nil {
                fmt.Fprintln(os.Stderr, err)
                os.Exit(1)
        }
        rd := bufio.NewReader(file)
        for {
                s, err := rd.ReadString('\n')
                if err == io.EOF { break }
                fmt.Print(s)
        }
        file.Close()
}

func main() {
        for _, name := range os.Args[1:] {
                cat(name)
        }
}
package main

import (
        "os"
        "fmt"
        "io/ioutil"
)

func cat(filename string) {
        buff, err := ioutil.ReadFile(filename)
        if err != nil {
                fmt.Fprintln(os.Stderr, err)
                os.Exit(1)
        }
        os.Stdout.Write(buff)
}

func main() {
        for _, name := range os.Args[1:] {
                cat(name)
        }
}

もうひとつ、io/ioutil パッケージの ReadFile 関数でファイルまるごと読み込む。

package main

import (
    "os"
    "fmt"
    "io/ioutil"
)

func cat(filename string) {
    buff, err := ioutil.ReadFile(filename)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
    os.Stdout.Write(buff)
}

func main() {
    for _, name := range os.Args[1:] {
        cat(name)
    }
}

実行結果はひとつめと同じなので省略。