Linter หรือ Lint Tool อาจจะมีที่มาจากเครื่องมือในการกำจัดขน ออกจากเนื้อผ้าฝ้าย เพื่อให้ผ้ามีความสะอาดสวยงามพร้อมนำไปใช้งาน
ส่วนในด้าน Software Development เราก็มีการใช้ Linter ด้วยเหมือนกัน เพื่อตรวจสอบ Source Code ที่เขียนลงไป ว่ามีอะไรที่อาจจะก่อให้เกิด error หรือ bugs ไปจนถึงความเสี่ยงด้านความปลอดภัย เอาเป็นว่า อยากจะตรวจสอบอะไร ถ้าสามารถหา pattern ได้ก็ควรจะตรวจสอบได้หมด
ในภาษา Go เรามี linter ให้เลือกใช้เยอะจนเวียนหัว แต่ถ้าจะให้แนะนำสักตัว ก็คงไม่พ้นต้องมีตัวนี้เป็นหนึ่งในตัวเลือกแรกๆ นั่นก็คือ golangci-lint
ข้อดีอย่างหนึ่งที่ผมชอบส่วนตัวคือ มันเป็นตัวรวม linter อื่นๆมาไว้ให้แล้ว และหนึ่งในนั้นก็คือ gosec เพียงแต่ว่า มันจะถูก disable เอาไว้เป็น default
วันนี้ก็เลยจะมาแนะนำการเปิดใช้ gosec ใน golangci-lint กันดู
ก่อนอื่นก็ install golangci-lint กันก่อน ตามคู่มือนี้ได้เลย https://golangci-lint.run/usage/install/
ส่วนผม install ด้วย Go แบบนี้
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
จากนั้นก็ไปที่ repo โปรเจคของเราที่เขียนด้วย Go แล้วก็สร้างไฟล์ config โดยสามารถสร้างได้หลายแบบ ตามนี้
.golangci.yml
.golangci.yaml
.golangci.toml
.golangci.json
โดยผมจะสร้างเป็น .golangci.yml
จากนั้นก็ลงรายละเอียดในไฟล์แบบนี้
linters:
enable:
- errcheck
- gosimple
- govet
- ineffassign
- staticcheck
- typecheck
- gosec
linters-settings:
gosec:
excludes:
- G303
ผมใส่ enable ตัว default ของ golangci-lint เอาไว้ก่อน และเติม gosec เข้าไปในลิสต์
ทีนี้ในกรณีที่ gosec มันสแกนยุบยับไปหมด และเราอยากจะปิดบางตัวเอาไว้ ยกตัวอย่างเช่น ผมจะปิดตัว G303 เพราะผมจะไปสร้างไฟล์ไว้ใน /tmp และก็บอกเงื่อนไขบางอย่างที่ผมไม่อยากจะทำตาม ก็เลยสาธิตการ disable ให้ดูแบบนี้
จากนั้นเราก็ทดลองรันดูด้วยคำสั่ง
golangci-lint run ./...
เท่านี้เราก็จะสามารถใช้ gosec ผ่าน golangci-lint ได้ง่ายๆ
ยังมี linter ให้เราสามารถเปิดใช้งานได้อีกเยอะตามนี้ https://golangci-lint.run/usage/linters/
หวังว่าจะเป็นประโยชน์นะครับ
Top comments (0)