0Pricing
Go Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Readerインターフェース
  2. Writerインターフェース
  3. ioユーティリティ関数
  4. カスタムReaderの実装
← Go Academyに戻る