ผสานข้อมูลเชิงลึกด้วย mergeOverwrite และ dict
ประกอบค่าที่มีโครงสร้างด้วยโปรแกรม
ผสานข้อมูลเชิงลึกด้วย mergeOverwrite และ dict เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
สร้างแมปในเทมเพลต
บางครั้งคุณจำเป็นต้องประกอบแมปขึ้นภายในเทมเพลต ฟังก์ชัน dict จะสร้างแมปจากคู่คีย์และค่าที่เรียงสลับกัน
{{ $cfg := dict "level" "info" "json" true }}เหตุผลที่ต้องรวมแมป
บ่อยครั้งคุณมีค่าเริ่มต้นของชาร์ตและค่าที่ผู้ใช้เขียนทับ และต้องการแมปที่รวมเป็นหนึ่งเดียว นั่นคือสิ่งที่ merge สร้างขึ้นโดยตรง
การผสานแบบตื้น
ฟังก์ชัน merge จะคัดลอกคีย์จากแมปต้นทางไปยังปลายทาง แต่จะคงค่าปลายทางไว้เมื่อมีคีย์นั้นอยู่แล้ว
{{ $out := merge $user $defaults }}merge ให้ความสำคัญกับปลายทาง
เมื่อใช้ merge อาร์กิวเมนต์แรกจะมีผลเหนือกว่าหากคีย์ขัดแย้งกัน จึงเหมาะเมื่ออินพุตของผู้ใช้ควรเขียนทับค่าเริ่มต้นของคุณ
พบกับ mergeOverwrite
ฟังก์ชัน mergeOverwrite ทำงานตรงกันข้าม โดยแมปต้นทางที่อยู่ถัดไปจะเขียนทับปลายทาง และซ้อนค่าลงด้านบน
{{ $out := mergeOverwrite $defaults $user }}การผสานแบบลึก ไม่ใช่แบบตื้น
ตัวช่วยทั้งสองทำการผสานแบบ recursively โดยรวมแมปที่ซ้อนอยู่ทีละคีย์ แทนที่จะแทนที่ทรีย่อยทั้งหมดในครั้งเดียว
คำเตือนเรื่องการเปลี่ยนแปลงค่า
โปรดระวัง: merge และ mergeOverwrite จะเปลี่ยนอาร์กิวเมนต์แรกโดยตรง หากต้องการคงต้นฉบับไว้ ให้ส่ง dict ใหม่เข้าไป
{{ $base := dict }}{{ $r := mergeOverwrite $base .Values.extra }}รูปแบบค่าเริ่มต้นแบบซ้อนชั้น
รูปแบบที่ใช้กันทั่วไปคือเริ่มจาก dict ของค่าเริ่มต้น แล้วซ้อนค่าของผู้ใช้ไว้ด้านบน เพื่อให้คีย์ที่ไม่ได้กำหนดใช้ค่าเผื่อกลับอย่างปลอดภัย
{{ $merged := mergeOverwrite (dict "port" 80) .Values.service }}อ่านค่าที่ผสานแล้ว
เมื่อผสานแล้ว คุณจะใช้งานผลลัพธ์เหมือนแมปทั่วไป และดึงคีย์ออกมาด้วย dot หรือฟังก์ชัน index ตามปกติ
{{ $merged.port }}แปลงผลลัพธ์เป็นรูปแบบจัดเก็บ
หากต้องการส่งโครงสร้างที่ผสานแล้วออกมาเป็น YAML ให้ไพป์ผ่าน toYaml และ nindent เพื่อให้บล็อกอยู่ในระดับการเยื้องที่ถูกต้อง
{{ toYaml $merged | nindent 4 }}เลือกคีย์หนึ่งรายการ
เมื่อชื่อคีย์เปลี่ยนแปลงได้หรือมีอักขระพิเศษ ให้เข้าถึงแมปด้วยฟังก์ชัน index แทนการเข้าถึงด้วย dot
{{ index $merged "log-level" }}ตรวจสอบอย่างรวดเร็ว
ตรวจสอบทิศทางการเขียนทับอย่างรวดเร็ว
สรุปทบทวน
คุณได้รู้จัก dict สำหรับสร้างแมป merge สำหรับคงคีย์ของปลายทาง และ mergeOverwrite สำหรับให้ค่าที่อยู่ถัดไปมีผลเหนือกว่า โดยทั้งหมดเป็นการผสานแบบลึก 🎉
คำถามที่พบบ่อย
บทเรียน “ผสานข้อมูลเชิงลึกด้วย mergeOverwrite และ dict” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ผสานข้อมูลเชิงลึกด้วย mergeOverwrite และ dict” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ผสานข้อมูลเชิงลึกด้วย mergeOverwrite และ dict”
ประกอบค่าที่มีโครงสร้างด้วยโปรแกรม คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ผสานข้อมูลเชิงลึกด้วย mergeOverwrite และ dict” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม
ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ผสานข้อมูลเชิงลึกด้วย mergeOverwrite และ dict
- tpl: ประมวลผลสตริงจากค่า
- วนซ้ำไฟล์ด้วย range บน .Files.Glob
- fail และตัวป้องกันการตรวจสอบแบบกำหนดเอง