อินเทอร์เฟซ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อินเทอร์เฟซ Reader
- อินเทอร์เฟซ Writer
- ฟังก์ชันอรรถประโยชน์ io
- การใช้งานตัวอ่านแบบกำหนดเอง