Go Academy · บทเรียน

ฟังก์ชันอรรถประโยชน์ io

คัดลอก TeeReader และ MultiWriter

บทเรียน 3 จาก 413 ขั้นตอน

ฟังก์ชันอรรถประโยชน์ io เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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 กระจายการเขียนหนึ่งครั้งไปยังตัวเขียนหลายตัวพร้อมกัน คล้ายคำสั่ง tee ของ Unix

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 นำตัวอ่านหลายตัวมาต่อกันเป็นสตรีมต่อเนื่องหนึ่งชุด

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 ก็ส่งไบต์ชุดเดียวกันเข้าแฮช ทำให้คำนวณค่าตรวจสอบได้ในการอ่านเพียงรอบเดียว

io.Pipe

io.Pipe เชื่อมตัวเขียนกับตัวอ่านในหน่วยความจำ ซึ่งมักใช้ข้ามโกโรทีนสำหรับรูปแบบการทำงานของผู้ผลิตและผู้บริโภคแบบสตรีม

เลือกตัวช่วยให้เหมาะสม

  • ย้ายข้อมูล: Copy / CopyN
  • ทำเอาต์พุตซ้ำ: MultiWriter
  • สังเกตอินพุต: TeeReader
  • รวมอินพุต: MultiReader
  • อ่านอินพุตจนหมด: Discard

การประกอบเข้าด้วยกัน

ตัวช่วยเหล่านี้ล้วนใช้ io.Reader/io.Writer จึงสามารถซ้อนและเชื่อมต่อกันได้อย่างอิสระ เพื่อสร้างไปป์ไลน์ที่ซับซ้อนจากส่วนประกอบขนาดเล็ก

ตรวจสอบอย่างรวดเร็ว

ทดสอบความรู้เกี่ยวกับตัวช่วยของ io

สรุป

คุณได้เรียนรู้ตัวช่วยด้านยูทิลิตีของ io แล้ว

  • Copy / CopyN ใช้สตรีมข้อมูล
  • MultiWriter ทำเอาต์พุตซ้ำ
  • TeeReader สังเกตอินพุต
  • MultiReader รวมอินพุต และ Discard อ่านอินพุตจนหมด
  • ทั้งหมดสามารถประกอบกันผ่านอินเทอร์เฟซ Reader/Writer
เริ่มต้นได้ฟรี

เรียนรู้ Go ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

คำถามที่พบบ่อย

บทเรียน “ฟังก์ชันอรรถประโยชน์ io” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ฟังก์ชันอรรถประโยชน์ io” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชันอรรถประโยชน์ io”

คัดลอก TeeReader และ MultiWriter คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ฟังก์ชันอรรถประโยชน์ io” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. อินเทอร์เฟซ Reader
  2. อินเทอร์เฟซ Writer
  3. ฟังก์ชันอรรถประโยชน์ io
  4. การใช้งานตัวอ่านแบบกำหนดเอง
← กลับไปที่ Go Academy