แฟล็กและแฟล็กถาวร
แฟล็กชนิด string, int, bool และการผสานการทำงานกับ Viper
แฟล็กและแฟล็กถาวร เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
แฟล็กเฉพาะคำสั่ง
แฟล็กเฉพาะคำสั่งมีผลกับคำสั่งที่กำหนดแฟล็กนั้นเท่านั้น ใช้ cmd.Flags():
var port int
serveCmd.Flags().IntVar(&port, "port", 8080, "HTTP server port")แฟล็กแบบสืบทอด
แฟล็กแบบสืบทอดจะถูกสืบทอดโดยคำสั่งและคำสั่งย่อยทั้งหมด ใช้ cmd.PersistentFlags():
var verbose bool
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Enable verbose output")แฟล็กแบบอักษรย่อ
ใช้รูปแบบ *VarP เพื่อเพิ่มชื่อย่อแบบอักษรเดียว:
cmd.Flags().StringVarP(&output, "output", "o", "stdout", "Output destination")ชนิดของแฟล็ก
Cobra (ผ่าน pflag) รองรับ String, Bool, Int, Int64, Float64, StringSlice, Duration, Count และชนิดอื่น ๆ แต่ละชนิดมีรูปแบบ Var (รับตัวชี้) และรูปแบบอำนวยความสะดวก (ส่งคืนตัวชี้)
แฟล็กที่จำเป็น
กำหนดให้แฟล็กเป็นค่าที่จำเป็น — Cobra จะแจ้งข้อผิดพลาดหากไม่ได้ระบุแฟล็กนั้น:
cmd.MarkFlagRequired("config")กลุ่มแฟล็ก
กำหนดให้แฟล็กไม่สามารถใช้ร่วมกันได้ หรือกำหนดให้ต้องใช้ร่วมกันด้วย MarkFlagsRequiredTogether และ MarkFlagsMutuallyExclusive:
cmd.MarkFlagsRequiredTogether("user", "password")
cmd.MarkFlagsMutuallyExclusive("json", "yaml")แฟล็ก StringSlice
รับค่าหลายค่าเป็นรายการที่คั่นด้วยจุลภาค หรือรับผ่านแฟล็กที่ระบุซ้ำหลายครั้ง:
var tags []string
cmd.Flags().StringSliceVar(&tags, "tags", nil, "Tags (comma-separated)")
// Usage: --tags a,b,c or --tags a --tags bการเชื่อมแฟล็กกับ Viper
เชื่อมแฟล็กของ Cobra กับคีย์ของ Viper เพื่อให้ค่าดังกล่าวมาจากตัวแปรสภาพแวดล้อมหรือไฟล์การตั้งค่าได้เช่นกัน:
viper.BindPFlag("port", serveCmd.Flags().Lookup("port"))
viper.BindEnv("port", "APP_PORT")การแสดงค่าเริ่มต้น
Cobra จะแสดงค่าเริ่มต้นในข้อความวิธีใช้โดยอัตโนมัติ ควรกำหนดค่าเริ่มต้นที่ชัดเจนและใช้งานได้ทันทีสำหรับกรณีทั่วไป
การเข้าถึงค่าของแฟล็ก
เข้าถึงค่าของแฟล็กผ่านตัวชี้ที่เชื่อมไว้ หรือค้นหาตามชื่อจากชุดแฟล็กของคำสั่ง หากไม่สามารถเข้าถึงตัวชี้ได้:
port, _ := cmd.Flags().GetInt("port")วิธี Changed
cmd.Flags().Changed("flag-name") จะส่งคืนค่า true เฉพาะเมื่อผู้ใช้กำหนดแฟล็กนั้นอย่างชัดเจน ใช้เพื่อแยกความแตกต่างระหว่าง "ไม่ได้ระบุ" กับ "ระบุโดยใช้ค่าเริ่มต้น"
ตรวจสอบอย่างรวดเร็ว
แฟล็กเฉพาะคำสั่งและแฟล็กแบบสืบทอดใน Cobra แตกต่างกันอย่างไร
สรุป: แฟล็กและแฟล็กแบบสืบทอด
ประเด็นสำคัญ:
- cmd.Flags(): เฉพาะคำสั่ง ส่วน cmd.PersistentFlags(): สืบทอดโดยคำสั่งย่อย
- *VarP สำหรับชื่อย่อ และ MarkFlagRequired สำหรับแฟล็กที่จำเป็น
- MarkFlagsRequiredTogether / MarkFlagsMutuallyExclusive สำหรับกำหนดความสัมพันธ์
- ใช้ Changed() เพื่อตรวจสอบว่าผู้ใช้กำหนดแฟล็กอย่างชัดเจนหรือไม่
คำถามที่พบบ่อย
บทเรียน “แฟล็กและแฟล็กถาวร” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แฟล็กและแฟล็กถาวร” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แฟล็กและแฟล็กถาวร”
แฟล็กชนิด string, int, bool และการผสานการทำงานกับ Viper คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “แฟล็กและแฟล็กถาวร” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน Cobra
- แฟล็กและแฟล็กถาวร
- คำสั่งย่อยและกลุ่มคำสั่ง
- การเผยแพร่เครื่องมือ CLI