Writerインターフェース
あらゆる対象に書き込みます
「Writerインターフェース」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
あらゆるものに書き込む
io.Writerは、ファイル、ネットワーク、バッファ、標準出力、HTTPレスポンスなど、すべての出力を統一します。1つのインターフェースで、多くの出力先を扱えます。
インターフェースの定義
契約は次のとおりです。
Write(p []byte) (n int, err error)
pを書き込み、書き込んだバイト数と、発生したエラーを返します。
バッファに書き込む
bytes.Bufferはio.Writerを実装し、出力をメモリ上に蓄積します。
package main
import (
"bytes"
"fmt"
)
func main() {
var buf bytes.Buffer
buf.Write([]byte("Hello, "))
buf.WriteString("Writer!")
fmt.Println(buf.String())
}標準出力に書き込む
os.Stdoutはio.Writerです。os.Stderrも同様です。
package main
import (
"io"
"os"
)
func main() {
io.WriteString(os.Stdout, "straight to stdout\n")
}fmt.FprintfとWriter
Fprint系列の関数は、任意のio.Writerに書式付きテキストを書き込みます。
package main
import (
"bytes"
"fmt"
)
func main() {
var buf bytes.Buffer
fmt.Fprintf(&buf, "x = %d\n", 42)
fmt.Print(buf.String())
}短い書き込みエラー
Writeがnilエラーとともにn < len(p)を返した場合、それはshort writeと呼ばれる契約違反です。仕様に準拠したWriterは、これをio.ErrShortWriteとして報告します。
Writerを受け取る関数
io.Writerを受け取る関数を書けば、同じロジックをファイル、バッファ、ネットワークのいずれにも向けられます。
package main
import (
"fmt"
"io"
"os"
)
func greet(w io.Writer, name string) {
fmt.Fprintf(w, "Hi, %s\n", name)
}
func main() {
greet(os.Stdout, "Ada")
}テストのための出力の分離
関数がio.Writerを受け取るため、テストでは出力をbytes.Bufferに取り込んでアサートできます。実際のファイルに触れる必要はありません。
package main
import (
"bytes"
"fmt"
)
func emit(w *bytes.Buffer) { fmt.Fprint(w, "result") }
func main() {
var b bytes.Buffer
emit(&b)
fmt.Println("captured:", b.String())
}バイトと文字列の書き込み
Writeはバイトスライスを受け取ります。io.WriteStringは文字列用の便利な関数で、書き込み先が対応していればアロケーションを避けられます。
package main
import (
"io"
"os"
)
func main() {
os.Stdout.Write([]byte("bytes\n"))
io.WriteString(os.Stdout, "string\n")
}書き込みエラーは必ず確認する
ファイルやソケットへの書き込みは、ストリームの途中で失敗することがあります(ディスク容量の不足や接続の切断など)。返されたエラーを確認してください。特にメモリ以外の書き込み先では重要です。
1つのインターフェース、多様な書き込み先
- ファイル、バッファ、stdout/stderr
- HTTPレスポンスライター
- 圧縮や暗号化のラッパー
これらはすべてio.Writerを満たすため、コードは書き込み先に依存しません。
クイックチェック
io.Writerの知識を確認しましょう。
まとめ
出力の基本インターフェースを学びました。
Write(p []byte) (int, error)が契約のすべてですbytes.Buffer、os.Stdout、HTTPレスポンスはすべてこれを実装していますfmt.Fprintfやio.WriteStringと組み合わせて使えます- 柔軟でテストしやすいAPIには
io.Writerを受け取らせます
よくある質問
「Writerインターフェース」レッスンは無料ですか?
はい。「Writerインターフェース」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「Writerインターフェース」で何を学びますか?
あらゆる対象に書き込みます ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Writerインターフェース」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Readerインターフェース
- Writerインターフェース
- ioユーティリティ関数
- カスタムReaderの実装