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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Readerインターフェース
- Writerインターフェース
- ioユーティリティ関数
- カスタムReaderの実装