0Pricing
Go Academy · レッスン

ioユーティリティ関数

Copy、TeeReader、MultiWriter

「ioユーティリティ関数」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

ioツールボックス

ioパッケージには、リーダーとライターを組み合わせる小さく強力なヘルパーが用意されています。Copy、TeeReader、MultiWriterなどです。

io.Copy

io.Copy(dst, src)は、リーダーからライターへすべてのバイトをストリーム転送し、転送したバイト数を返します。

package main

import (
	"fmt"
	"io"
	"os"
	"strings"
)

func main() {
	n, _ := io.Copy(os.Stdout, strings.NewReader("copied\n"))
	fmt.Println("bytes:", n)
}

io.CopyN

io.CopyN(dst, src, n)は正確にnバイトをコピーします。長さがわかっている先頭部分を読み取るときに便利です。

package main

import (
	"io"
	"os"
	"strings"
)

func main() {
	io.CopyN(os.Stdout, strings.NewReader("abcdef"), 3)
	os.Stdout.WriteString("\n")
}

io.MultiWriter

io.MultiWriterは1回の書き込みを複数のライターへ同時に分配します。Unixのteeコマンドに似ています。

package main

import (
	"bytes"
	"fmt"
	"io"
	"os"
)

func main() {
	var buf bytes.Buffer
	w := io.MultiWriter(os.Stdout, &buf)
	io.WriteString(w, "to both\n")
	fmt.Println("buffer copy:", buf.String())
}

io.TeeReader

io.TeeReader(r, w)は、読み取ったすべてのデータをwにもコピーするリーダーを返します。データの流れを記録したりハッシュ化したりするのに最適です。

package main

import (
	"bytes"
	"fmt"
	"io"
	"strings"
)

func main() {
	var spy bytes.Buffer
	tee := io.TeeReader(strings.NewReader("stream"), &spy)
	io.ReadAll(tee)
	fmt.Println("observed:", spy.String())
}

io.MultiReader

io.MultiReaderは複数のリーダーを1つの連続したストリームに連結します。

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := io.MultiReader(strings.NewReader("Hello, "), strings.NewReader("World"))
	data, _ := io.ReadAll(r)
	fmt.Println(string(data))
}

io.Discard

io.Discardはすべてのデータを破棄するライターです。必要のないリーダーを最後まで読み進めるときに便利です。

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	n, _ := io.Copy(io.Discard, strings.NewReader("ignored"))
	fmt.Println("discarded:", n, "bytes")
}

TeeReaderによるハッシュ化

典型的な組み合わせです。ストリームを本来の目的で読み取りながら、TeeReaderで同じバイト列をハッシュに送り、1回の読み取りでチェックサムを計算します。

io.Pipe

io.Pipeはメモリ上でライターとリーダーを接続します。多くの場合、goroutine間でストリーミングによるプロデューサー・コンシューマーパターンを実現するために使います。

適切なヘルパーの選び方

  • データを移動する:Copy / CopyN
  • 出力を複製する:MultiWriter
  • 入力を観察する:TeeReader
  • 入力を連結する:MultiReader
  • 入力を最後まで読み進める:Discard

組み合わせ可能性

これらのヘルパーはすべてio.Readerやio.Writerを扱うため、自由に入れ子にしたり連結したりできます。小さな部品から高度なパイプラインを構築できます。

クイックチェック

ioユーティリティの知識を確認しましょう。

まとめ

ioのユーティリティヘルパーを学びました。

  • Copy / CopyNはデータをストリーム転送します
  • MultiWriterは出力を複製します
  • TeeReaderは入力を観察します
  • MultiReaderは入力を連結し、Discardは最後まで読み進めます
  • すべてReader/Writerインターフェースを介して組み合わせられます

よくある質問

「ioユーティリティ関数」レッスンは無料ですか?

はい。「ioユーティリティ関数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「ioユーティリティ関数」で何を学びますか?

Copy、TeeReader、MultiWriter ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「ioユーティリティ関数」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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