io
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
: