ファイル入出力の練習に cat コマンドを写経してみた。
まずひとつめ、bufio
の ReadString
関数で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) } }
実行結果はひとつめと同じなので省略。