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

การเขียนไฟล์และไฟล์ชั่วคราว

ใช้ WriteFile แฟล็กของ OpenFile และไฟล์ชั่วคราว

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

os.WriteFile

os.WriteFile เขียนสไลซ์ของไบต์ลงในไฟล์แบบอะตอมิก (ตัดเนื้อหาเดิมแล้วเขียนใหม่) เหมาะสำหรับไฟล์ขนาดเล็กและใช้งานได้ง่าย

err := os.WriteFile("output.txt", []byte("hello"), 0644)
if err != nil { log.Fatal(err) }

os.Create และการ defer Close

os.Create จะสร้างไฟล์หรือตัดเนื้อหาเดิมของไฟล์ แล้วคืนค่าเป็น *os.File ควรปิดไฟล์ด้วย defer เสมอ

f, err := os.Create("output.txt")
if err != nil { return err }
defer f.Close()
f.WriteString("hello\n")

os.OpenFile พร้อมแฟล็ก

ใช้ os.OpenFile สำหรับโหมดเพิ่มข้อมูลท้ายไฟล์ โหมดสร้างเมื่อยังไม่มีไฟล์ หรือโหมดสร้างแบบไม่ให้ซ้ำ:

f, err := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

bufio.Writer

ห่อไฟล์ด้วย bufio.NewWriter เพื่อรวมการเขียนขนาดเล็กให้เป็นการเรียกระบบที่ใหญ่ขึ้น เรียก Flush() ก่อนปิดไฟล์เพื่อเขียนข้อมูลที่ยังอยู่ในบัฟเฟอร์

w := bufio.NewWriter(f)
fmt.Fprintf(w, "line %d\n", i)
w.Flush()

fmt.Fprintf

เขียนข้อความที่จัดรูปแบบแล้วลงใน io.Writer ใด ๆ รวมถึงไฟล์:

fmt.Fprintf(f, "name: %s, age: %d\n", name, age)

รูปแบบการเขียนไฟล์แบบอะตอมิก

เขียนลงในไฟล์ชั่วคราวก่อน แล้วจึงเปลี่ยนชื่อเป็นไฟล์ปลายทาง การเปลี่ยนชื่อเป็นแบบอะตอมิกบน POSIX ดังนั้นโปรแกรมอ่านจะเห็นไฟล์เก่าหรือไฟล์ใหม่อย่างใดอย่างหนึ่ง และจะไม่เห็นการเขียนที่ไม่สมบูรณ์

tmp, _ := os.CreateTemp("", "output-*.txt")
tmp.Write(data)
tmp.Close()
os.Rename(tmp.Name(), "output.txt")

os.CreateTemp

os.CreateTemp(dir, pattern) สร้างไฟล์ชั่วคราวใน dir โดยใช้ชื่อที่ไม่ซ้ำและตรงกับ pattern ฟังก์ชันจะคืนค่าไฟล์ที่เปิดอยู่ ผู้เรียกมีหน้าที่ลบไฟล์ดังกล่าว

f, err := os.CreateTemp("", "upload-*.json")
defer os.Remove(f.Name()) // cleanup

os.MkdirTemp

os.MkdirTemp สร้างไดเรกทอรีชั่วคราว ใช้สำหรับชุดข้อมูลประกอบการทดสอบหรือกระบวนการประมวลผลที่สร้างไฟล์ชั่วคราวหลายไฟล์

dir, err := os.MkdirTemp("", "batch-*")
defer os.RemoveAll(dir)

สิทธิ์ของไฟล์

ส่งบิตสิทธิ์แบบ Unix (เช่น 0644 ซึ่งหมายถึงเจ้าของอ่านและเขียนได้ กลุ่มอ่านได้ และผู้ใช้อื่นอ่านได้) เป็นอาร์กิวเมนต์สุดท้ายให้ฟังก์ชันรูปแบบ Create ค่า umask ของกระบวนการอาจจำกัดสิทธิ์เหล่านี้เพิ่มเติม

การตรวจสอบข้อผิดพลาดในการเขียน

f.WriteString และ fmt.Fprintf อาจคืนค่าข้อผิดพลาดได้ เช่น ดิสก์เต็มหรือไม่มีสิทธิ์ ให้ตรวจสอบข้อผิดพลาดหรือสะสมข้อผิดพลาดด้วยตัวห่อหุ้มตัวเขียนที่บันทึกข้อผิดพลาดแรก

sync.File ไม่ปลอดภัยสำหรับการทำงานพร้อมกัน

กอร์รูทีนหลายตัวที่เขียนลงใน *os.File เดียวกันพร้อมกันอาจทำให้การเขียนสอดแทรกกันได้ ให้ใช้มิวเท็กซ์หรือตัวเขียนเฉพาะที่ทำงานในกอร์รูทีนเดียว

ตรวจสอบความเข้าใจอย่างรวดเร็ว

เหตุใดรูปแบบการเขียนลงไฟล์ชั่วคราวแล้วเปลี่ยนชื่อจึงถือว่าเป็นแบบอะตอมิก?

สรุป: การเขียนไฟล์

ประเด็นสำคัญ:

  • os.WriteFile: เขียนทับได้ง่าย ส่วน bufio.Writer ใช้รวมการเขียนขนาดเล็ก
  • การเขียนแบบอะตอมิก: ไฟล์ชั่วคราวและการเปลี่ยนชื่อ
  • ใช้ os.CreateTemp / os.MkdirTemp สำหรับทรัพยากรชั่วคราว และใช้ defer เพื่อทำความสะอาดเสมอ
  • ตรวจสอบข้อผิดพลาดในการเขียน และประสานการเขียนพร้อมกัน

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

บทเรียน “การเขียนไฟล์และไฟล์ชั่วคราว” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การเขียนไฟล์และไฟล์ชั่วคราว”

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

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

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

บทเรียน “การเขียนไฟล์และไฟล์ชั่วคราว” ใช้เวลานานแค่ไหน

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

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

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

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

  1. อ่านไฟล์ด้วย os และ bufio
  2. การเขียนไฟล์และไฟล์ชั่วคราว
  3. การเข้ารหัสและถอดรหัส JSON
  4. JSON และ CSV แบบสตรีม
← กลับไปที่ Go Academy