io

io

https://golang.org/pkg/io/

基礎的なI/Oのインタフェースを提供する。
osパッケージなどにある様々なI/Oプリミティブを抽象化する。

参考:

func Copy

https://golang.org/pkg/io/#Copy

func Copy(dst Writer, src Reader) (written int64, err error)

srcからdstに書き込む。
終了条件は、EOFに到達するか、エラーが発生すること。

Example:

// 例: ファイルのコピー
// エラー処理は省略
src, _ := os.Open(srcName)
defer src.Close()
dst, _ := os.Create(dstName)
defer dst.Close()

io.Copy(dst, src)

参考:

func TeeReader

https://golang.org/pkg/io/#TeeReader

func TeeReader(r Reader, w Writer) Reader

rをwに書き込みつつ、同時に読み取れるReaderを提供する。
入力を複製したいときに使える。

Example:

r := strings.NewReader("some io.Reader stream to be read\n")
var buf bytes.Buffer
tee := io.TeeReader(r, &buf)

printall := func(r io.Reader) {
    b, _ := ioutil.ReadAll(r) // エラー処理省略
    fmt.Printf("%s", b)
}

printall(tee)
printall(&buf)

https://play.golang.org/p/p4bxk_oxr52

type Reader (interface)

https://golang.org/pkg/io/#Reader

定義:

type Reader interface {
    Read(p []byte) (n int, err error)
}

実装例:

  • os.File, strings.Reder, bytes.Buffer, net.Conn

type Writer (interface)

https://golang.org/pkg/io/#Writer

定義:

type Writer interface {
    Write(p []byte) (n int, err error)
}

io/ioutil

https://golang.org/pkg/io/ioutil/

Variables

// /dev/null 的な存在。出力を破棄したいときに使うといい
var Discard io.Writer = devNull(0)

参考:

func ReadDir

https://golang.org/pkg/io/ioutil/#ReadDir

func ReadDir(dirname string) ([]os.FileInfo, error)

ディレクトリ内のファイルをリストする。

Examples:

files, err := ioutil.ReadDir(".")
if err != nil {
    log.Fatal(err)
}

for _, file := range files {
    fmt.Println(file.Name())
}

参考:

func ReadFile

https://golang.org/pkg/io/ioutil/#ReadFile

func ReadFile(filename string) ([]byte, error)

ファイルを一気に読み込む。

Example

content, err := ioutil.ReadFile("testdata/hello")
if err != nil {
    log.Fatal(err)
}
fmt.Printf("File contents: %s", content)

func TempDir

https://golang.org/pkg/io/ioutil/#TempDir

func TempDir(dir, pattern string) (name string, err error)
  • dirの下位にテンポラリっぽい名前のディレクトリを作る。
  • dirが空文字だったら、デフォルトのテンポラリファイルのディレクトリが使われる(See os.TempDir
  • 作ったディレクトリは自分で消さないと消えない
  • patternは * を含む文字列を与えることができ、最後に現れた * がランダムに置換される。

Examples:

logsDir, err := ioutil.TempDir(os.TempDir(), "*-logs")
if err != nil {
    log.Fatal(err)
}
defer os.RemoveAll(logsDir) // clean up
: