ファイル入出力の練習に 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)
}
}
実行結果はひとつめと同じなので省略。