errdefer สำหรับการล้างข้อมูลเมื่อเกิดความล้มเหลว
ย้อนการทำงานเฉพาะเมื่อมีบางอย่างล้มเหลว
errdefer สำหรับการล้างข้อมูลเมื่อเกิดความล้มเหลว เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทำความสะอาดเฉพาะเมื่อเกิดความล้มเหลว
บางครั้งคุณต้องย้อนคืนงานเมื่อการดำเนินการล้มเหลว แต่ต้องเก็บงานนั้นไว้เมื่อสำเร็จ กรณีที่เจาะจงนี้คือสิ่งที่ errdefer ใช้จัดการ
ทำความรู้จัก errdefer
errdefer กำหนดให้โค้ดทำงานเมื่อออกจากขอบเขต แต่จะทำงานเฉพาะเมื่อฟังก์ชันส่งคืนข้อผิดพลาดที่เกิดขึ้นหลังจากจุดนั้น
errdefer allocator.free(buffer);defer ทำงานเสมอ ส่วน errdefer ทำงานเมื่อเกิดข้อผิดพลาด
defer ทำงานไม่ว่าขอบเขตจะสิ้นสุดลงอย่างไร ส่วน errdefer ทำงานเฉพาะบนเส้นทางข้อผิดพลาด ดังนั้นเมื่อสำเร็จจึงข้ามไปทั้งหมด
คืนพื้นที่ผลลัพธ์ที่สร้างไม่เสร็จ
จัดสรรพื้นที่ แล้วใช้ errdefer เพื่อคืนพื้นที่ หากขั้นตอนถัดไปล้มเหลว บัฟเฟอร์จะถูกปล่อยคืน แต่หากทุกขั้นตอนสำเร็จ คุณจะเก็บและส่งคืนบัฟเฟอร์นั้น
const buf = try allocator.alloc(u8, n);
errdefer allocator.free(buf);
try fill(buf);ลำดับสอดคล้องกับการจัดสรร
วาง errdefer แต่ละรายการไว้ทันทีหลังการขอใช้ทรัพยากรที่ตรงกัน เมื่อเกิดความล้มเหลว รายการเหล่านี้จะทำงานย้อนกลับตามลำดับ เพื่อคืนทรัพยากรอย่างปลอดภัย
const a = try open();
errdefer a.close();
const b = try open();
errdefer b.close();ความสำเร็จเก็บงานของคุณไว้
เมื่อฟังก์ชันส่งคืนค่าแทนข้อผิดพลาด errdefer ทุกตัวจะถูกข้ามไป ผู้เรียกจะได้รับผลลัพธ์ที่สร้างเสร็จสมบูรณ์
return buf;จุดที่ลงทะเบียนมีความสำคัญ
errdefer จะดูแลเฉพาะข้อผิดพลาดที่เกิดขึ้นหลังจากลงทะเบียนไว้ ข้อผิดพลาดก่อนบรรทัดนั้นจะเรียกใช้ไม่ได้ ดังนั้นควรวางไว้แต่เนิ่น ๆ
เก็บข้อผิดพลาดไว้ตรวจสอบ
คุณสามารถเก็บข้อผิดพลาดไว้ใน errdefer เพื่อตรวจสอบระหว่างการทำความสะอาด เช่น บันทึกว่าความล้มเหลวใดเป็นตัวกระตุ้นการย้อนคืน
errdefer |e| std.debug.print("failed: {}\n", .{e});สร้างตัวสร้างที่ไม่ทำให้หน่วยความจำรั่ว
ฟังก์ชันที่จัดสรรพื้นที่แล้วอาจล้มเหลวได้ จะใช้ errdefer เพื่อไม่ให้เกิดการรั่วไหล งานที่ทำไว้เพียงบางส่วนจะถูกย้อนคืนโดยอัตโนมัติเมื่อเกิดข้อผิดพลาดใด ๆ
ใช้ร่วมกับ try
try แต่ละตัวอาจออกจากฟังก์ชันก่อนกำหนดเมื่อเกิดข้อผิดพลาด หากลงทะเบียน errdefer ไว้ การออกก่อนกำหนดนั้นก็ยังเรียกใช้การทำความสะอาดของคุณก่อนคลายทรัพยากร
const x = try step();
errdefer rollback(x);
_ = try next(x);เครื่องมือที่เหมาะกับการย้อนคืน
ใช้ errdefer เมื่อควรทำความสะอาดเฉพาะกรณีที่เกิดปัญหา มันเปลี่ยนการจัดการทรัพยากรบนเส้นทางข้อผิดพลาดให้เป็นบรรทัดเดียวที่ชัดเจน
ตรวจสอบอย่างรวดเร็ว
คุณจัดสรรบัฟเฟอร์ แล้วขั้นตอนถัดไปอาจล้มเหลว คุณต้องการคืนพื้นที่เฉพาะเมื่อเกิดความล้มเหลว ควรใช้สิ่งใด
สรุป
คุณใช้ errdefer เพื่อย้อนคืนงานที่ทำไว้บางส่วนบนเส้นทางข้อผิดพลาด วางไว้ทันทีหลังการขอใช้ทรัพยากรแต่ละครั้ง และรักษาผลลัพธ์ที่สำเร็จไว้ได้ ✅
คำถามที่พบบ่อย
บทเรียน “errdefer สำหรับการล้างข้อมูลเมื่อเกิดความล้มเหลว” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “errdefer สำหรับการล้างข้อมูลเมื่อเกิดความล้มเหลว” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “errdefer สำหรับการล้างข้อมูลเมื่อเกิดความล้มเหลว”
ย้อนการทำงานเฉพาะเมื่อมีบางอย่างล้มเหลว คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “errdefer สำหรับการล้างข้อมูลเมื่อเกิดความล้มเหลว” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กู้คืนด้วย catch
- เลือกตามข้อผิดพลาดเฉพาะ
- errdefer สำหรับการล้างข้อมูลเมื่อเกิดความล้มเหลว
- ห่อและส่งข้อผิดพลาดต่อ