การเขียนไฟล์และไฟล์ชั่วคราว
ใช้ 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()) // cleanupos.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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อ่านไฟล์ด้วย os และ bufio
- การเขียนไฟล์และไฟล์ชั่วคราว
- การเข้ารหัสและถอดรหัส JSON
- JSON และ CSV แบบสตรีม