0Pricing
Go Academy · บทเรียน

อินเทอร์เฟซ Writer

เขียนไปยังสิ่งใดก็ได้

อินเทอร์เฟซ Writer เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

เขียนไปยังทุกสิ่ง

io.Writer รวมข้อมูลออกทุกชนิดไว้ด้วยกัน ไม่ว่าจะเป็นไฟล์ เครือข่าย บัฟเฟอร์ เอาต์พุตมาตรฐาน หรือการตอบกลับ HTTP อินเทอร์เฟซเดียว ใช้ได้กับปลายทางหลายชนิด

คำจำกัดความของอินเทอร์เฟซ

สัญญาคือ:

  • Write(p []byte) (n int, err error)

เมธอดนี้จะเขียนข้อมูลใน p และส่งคืนจำนวนไบต์ที่เขียนได้ รวมถึงข้อผิดพลาดที่อาจเกิดขึ้น

การเขียนลงใน Buffer

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 และตัวเขียน

ตระกูล 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 ส่งคืนค่า n < len(p) พร้อมข้อผิดพลาดเป็น nil นั่นเป็นการละเมิดสัญญาที่เรียกว่า การเขียนไม่ครบ ตัวเขียนที่ทำงานสอดคล้องกับสัญญาจะแจ้งกรณีนี้เป็น io.ErrShortWrite

ฟังก์ชันที่รับตัวเขียน

เขียนฟังก์ชันที่รับ 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")
}

ตรวจสอบข้อผิดพลาดจาก Write เสมอ

การเขียนลงไฟล์หรือซ็อกเก็ตอาจล้มเหลวระหว่างทางได้ เช่น ดิสก์เต็มหรือการเชื่อมต่อหลุด จึงควรตรวจสอบข้อผิดพลาดที่ส่งกลับ โดยเฉพาะเมื่อไม่ได้เขียนลงหน่วยความจำ

อินเทอร์เฟซเดียว ปลายทางมากมาย

  • ไฟล์ บัฟเฟอร์ เอาต์พุตมาตรฐาน/เอาต์พุตข้อผิดพลาดมาตรฐาน
  • ตัวเขียนการตอบกลับ HTTP
  • ตัวห่อสำหรับการบีบอัดและการเข้ารหัส

ทั้งหมดนี้สอดคล้องกับ io.Writer ดังนั้นโค้ดจึงไม่ขึ้นกับปลายทาง

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

ทดสอบความรู้เกี่ยวกับ io.Writer

สรุป

คุณได้เรียนรู้อินเทอร์เฟซเอาต์พุตหลักแล้ว

  • Write(p []byte) (int, error) คือข้อกำหนดทั้งหมด
  • bytes.Buffer, os.Stdout และการตอบกลับ HTTP ล้วนใช้งานอินเทอร์เฟซนี้
  • ทำงานร่วมกับ fmt.Fprintf และ io.WriteString ได้
  • รับ io.Writer เพื่อสร้างเอพีไอที่ยืดหยุ่นและทดสอบได้

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

บทเรียน “อินเทอร์เฟซ Writer” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “อินเทอร์เฟซ Writer”

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

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

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

บทเรียน “อินเทอร์เฟซ Writer” ใช้เวลานานแค่ไหน

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

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

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

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

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