- อาร์กฏหมาย
Linter สำหรับ GO ที่ตรวจสอบอาร์กิวเมนต์การโทรแบบคงที่กับเจ้าหน้าที่ฟังก์ชั่น (สัญญา AKA)
ตัวอย่าง
สมมติว่าคุณมีฟังก์ชั่นต่อไปนี้:
func div ( n , d float64 ) float64 {
if d == 0 {
panic ( "denominator must not be zero" )
}
return n / d
} แล้วคุณเรียกมันว่าแบบนี้:
แม้ว่าเราจะไม่ทราบว่า userInput เราจะเห็นได้ว่าการเรียกใช้ฟังก์ชันนี้จะตื่นตระหนกในรันไทม์เพราะอาร์กิวเมนต์ที่สองเป็นศูนย์เสมอ
Linter ค้นหาและรายงานสถานที่ดังกล่าวโดยใช้การดำเนินการรหัสบางส่วนที่ปลอดภัยและเวทมนตร์ดำ
- การติดตั้ง
go install github.com/orsinium-labs/arguard@latest
การใช้งาน
ธงที่มีอยู่:
-
-contracts.follow-imports : ตั้งค่าสถานะนี้เป็นเท็จเพื่อไม่ให้แยกสัญญาจากโมดูลที่นำเข้า กล่าวอีกนัยหนึ่งการละเมิดสัญญา (ยาม) จะถูกรายงานเฉพาะในกรณีที่ฟังก์ชั่นกับสัญญาและการเรียกใช้ฟังก์ชันจะอยู่ในแพ็คเกจวิเคราะห์เดียวกัน มีประโยชน์สำหรับ ประสิทธิภาพ ที่ดีขึ้น -
-contracts.report-contracts : ปล่อยข้อความสำหรับทุกสัญญาที่ตรวจพบ มีประโยชน์สำหรับ การดีบัก เพื่อดูว่ามีการตรวจพบสัญญาโดย linter หรือไม่ -
-arguard.report-errors : ตั้งค่าสถานะนี้เพื่อแสดงความล้มเหลวในระหว่างการดำเนินการตามสัญญา โดยค่าเริ่มต้นหาก Arguard ล้มเหลวในการดำเนินการตามสัญญามันจะย้ายไปโดยไม่ต้องรายงานอะไรเลย มีประโยชน์สำหรับ การดีบัก เพื่อดูว่าเหตุใดจึงไม่มีการรายงานข้อผิดพลาดของสัญญา
- QNA
- - มันทำงานอย่างไร? มีเครื่องวิเคราะห์สองตัวอยู่ข้างใน คนแรกตรวจพบสัญญาที่ปลอดภัยต่อการ execute (ยาม) ในรหัส อันที่สองตรวจจับการเรียกใช้ฟังก์ชั่นที่มีสัญญาที่รู้จักแยกอาร์กิวเมนต์ที่รู้จักกันอย่างไม่หยุดยั้งและดำเนินการสัญญาที่สามารถดำเนินการได้โดยใช้ Yaegi
- - ยาม (สัญญา) คืออะไร? หากเงื่อนไขที่จุดเริ่มต้นของฟังก์ชั่น (เฉพาะสัญญาอื่น ๆ เท่านั้นที่สามารถไปได้ก่อน) ด้วยการตรวจสอบอย่างปลอดภัยต่อการรับส่งข้อมูลและร่างกายจะส่งคืนข้อผิดพลาดหรือการเรียก
panic เท่านั้น - - ผลลัพธ์ที่เชื่อถือได้แค่ไหน? หากรายงานข้อผิดพลาดมีข้อผิดพลาดมากที่สุด หากไม่ได้รายงานข้อผิดพลาดอาจมีข้อผิดพลาด มันเป็น linter ไม่ใช่ตัวตรวจสอบอย่างเป็นทางการ
- ⚖ โครงการมีเสถียรภาพแค่ไหน? การวิเคราะห์แบบคงที่ใน GO อาจยุ่งเหยิงโดยเฉพาะอย่างยิ่งเมื่อเราทำการดำเนินการรหัสบางส่วน linter อาจล้มเหลวผิดหรือไม่ฉลาดเท่าที่ควร ถึงกระนั้นก็เป็นเครื่องวิเคราะห์แบบคงที่ไม่ใช่การพึ่งพาการผลิตดังนั้นจึงควรใช้งานได้อย่างปลอดภัยในโครงการใด ๆ ในทุกสภาพแวดล้อม อย่างไรก็ตามโปรดทราบว่ายังมีการดำเนินการบางส่วนของรหัสบางส่วนดังนั้นคุณอาจไม่ควรเรียกใช้ในรหัสที่ไม่น่าเชื่อถือเพียงเพื่อความปลอดภัย
- - จะมีการเปลี่ยนแปลงหรือไม่? โครงการดังต่อไปนี้ อย่างไรก็ตามทุกรุ่นแม้กระทั่งแพทช์หนึ่งสามารถเริ่มรายงานการละเมิดใหม่ในรหัสของคุณ ดังนั้นในแง่หนึ่งการเปิดตัวทุกครั้งสามารถทำลายได้
- - มีการรวม Golangci-Lint หรือไม่? ยังไม่ได้ แต่ในที่สุดก็จะเป็น เป็นเรื่องง่ายที่จะรวม linter ที่ขับเคลื่อนด้วยการวิเคราะห์ใด ๆ กับ Golangci-Lint และ Arguard นั้นใช้พลังงานจากการวิเคราะห์ คอยติดตาม
- ✏ มีการรวม IDE หรือไม่? ยัง. เมื่อเรามีการรวม Golangci-Lint การรวม IDE จะมาฟรี
- - นี่เป็นความคิดใหม่หรือไม่? โครงการใช้หนึ่งในสิ่งที่จัดการห้องสมุด Python ของฉันสำหรับการออกแบบตามสัญญาสามารถทำได้ การจัดการเองถูกสร้างขึ้นตามภูมิปัญญาของคนรุ่นใหม่ดูไทม์ไลน์นี้
- มี GO API เพื่อที่ฉันจะได้ใช้เป็นห้องสมุดหรือไม่? ใช่. แพ็คเกจการวิเคราะห์เป็นวิธีการในการเขียนเครื่องวิเคราะห์และนั่นคือวิธีที่คุณสามารถใช้โครงการได้ ดู main.go สำหรับตัวอย่างของวิธีการสร้างและเขียน
analysis.Analyzer หลายครั้งวิเคราะห์อินสแตนซ์ - ? ? ️ ได้รับการดูแลอย่างแข็งขันหรือไม่? โครงการในประเพณีที่ดีที่สุดของ Unix-Way มีขอบเขตที่เล็กและชัดเจนมาก ฉันอาจจะกลับมาเป็นครั้งคราวและนำความคิดที่น่าสนใจใหม่ ๆ ที่ฉันมีในช่วงกลางคืนนอนไม่หลับ แต่ไม่มีอะไรที่จะรักษาทุกวัน ถ้ามันใช้งานได้ในวันนี้มันจะไม่พังในวันพรุ่งนี้ขอบคุณรายการสั้น ๆ ของการพึ่งพาและสัญญาความเข้ากันได้ของ GO 1
- - ถ้าฉันพบข้อผิดพลาดล่ะ? แยกโครงการแก้ไขข้อผิดพลาดเขียนการทดสอบและเปิดคำขอดึง ฉันมักจะผสานและปล่อยผลงานใด ๆ ภายในหนึ่งวัน