たいさブログ

taisa's engineer blog

Go

[Golang]Goのio/ioutilパッケージは分かりやすくて使いやすい

投稿日:2019年10月29日 更新日:


Goのioパッケージは主にインターフェースになっていて他のパッケージで多く実装されています。またioパッケージにもパブリックな関数がありファイルの入出力はできますが少し細かい処理になります。io/ioutilパッケージを使うとファイルの入出力処理が簡単にできます。以下にio/ioutilパッケージを使った処理とそれに対するテストコードを記載します。

io/ioutil/ioutil.go

ReadAll()

ReadAllテスト

ReadFile()

ReadFileテスト

WriteFile()

WriteFileテスト

ReadDir()

ReadDirテスト

NopCloser Close()

NopCloserreaderインターフェースしかなく、closerを持っていない場合にダミーでcloserインターフェースを追加することができます。NopCloserClose()は何もしません。

NopCloser Closeテスト

DevNull Write()

DevNullを使うと吐き捨て用のWriterを利用することができます。Writeの他にもWriteStringReadFrom関数が用意されているのですが、今の所Writeしか呼び出すことができません(叩き方がわかりません)。これについては気になったのでWriteStringReadFromも叩けるようにGo本体にコードを変更してコントリビュートしてみたのですが、あえなくNGをくらいました。有り難いことに金曜日夕方にリクエストして夜には返信が来たのでレスポンスは早かったです。

Sorry, but we don’t want new public API here.
The type doesn’t need to be exported in order to implement WriteString, etc.
https://go-review.googlesource.com/c/go/+/203377

DevNull Writeテスト

Go本体へコントリビュートするにはGerritを使う必要があるのですが、本家のドキュメントがしっかりしているのと、日本語でも「Go にコントリビュートするまでの手順」という記事を公開してくれているので比較的すんなり行うことができました。

Contribution Guide

The Go project welcomes all contributors. This document is a guide to help you through the process of contributing to the Go project, which is a little different from that used by other open source projects. We assume you have a basic understanding of Git and Go.

Go にコントリビュートするまでの手順 – blog.syfm

最近、ついに Go ( golang/go) にコントリビュートしました! 正確にはレビュー中で、レビューが通ってもマージされるのは Go 1.10 なので、だいぶ先は長いですが取り敢えず自分のできることは一通り終わりました。 Go ではレビューシステムに GitHub は使っておらず、代わりに Google が開発した Gerrit を使っています。 普段の GitHub を利用したフローと結構異なっていたので備忘録がてらブログに書いておこうと思います。

io/ioutil/tempfile.go

TempFile()

TempFileテスト

TempDir()

TempDirテスト

ソースコード

taisa831/sandbox-go

You can’t perform that action at this time. You signed in with another tab or window. You signed out in another tab or window. Reload to refresh your session. Reload to refresh your session.

参考書籍

本書はGoio.Writerio.Readerからはじまりシステムの深いところまで丁寧に説明されているのでとてもおすすめです。Webで無料で見れますし書籍版、PDF版で購入も可能です。

Web版

Goならわかるシステムプログラミング

書籍版


-Go

執筆者:

関連記事

Golang 1.13 released! The difference from 1.12 to 1.13

Golang 1.13 was released in 3 September 2019. This post has difference from 1.12 to 1.13. I check th …

[Golang] Goを始めたらまずはioパッケージを知るべし

Goを書いているとio.writerとio.readerを扱うケースが頻繁に出てきますが、これはioパッケージが多くの他のパッケージのインターフェースになっているからなのでioパッケージを知っておくこ …

Go言語 GORM+GinでTODOリストを作ってみた

前回の「Go言語 ORMライブラリ GORMの使い方」に続いて「GORM+Gin」でTODOリストを作ってみました。使い方は「GitHubのREADME」を参考にしました。できたものは下記URLから確 …

Golangを使ってJWTを15分で理解する

JWTとは JWT(ジョットと言うらしい)はJSON Web Tokenの略で、JSONをベースとしたアクセストークンのためのオープン標準 (RFC 7519) です。色々記事を見ましたが、最終的にW …

Go言語 GORM+GinでTODOリストのAPIを作ってみた

前回の「Go言語 GORM+GinでTODOリストを作ってみた」に続いて「GORM+Gin」でTODOリストのAPIを作ってみました。ソースコードは前回からの差分だけを記載しています。できたものは下記 …

Top