SQLVET ดำเนินการวิเคราะห์แบบคงที่เกี่ยวกับการสืบค้น SQL RAW ในฐานรหัส GO ของคุณไปยังข้อผิดพลาดรันไทม์ที่อาจเกิดขึ้นในเวลาที่สร้าง
คุณสมบัติไฮไลท์:
สิ่งที่ต้องทำ:
ไปน้อยกว่า 1.18:
$ go get github.com/houqp/sqlvetไปมากขึ้นหรือเท่ากับ 1.18:
$ go install github.com/houqp/sqlvet@latestSQLVET ควรทำงานนอกกรอบสำหรับโครงการ GO ใด ๆ โดยใช้โมดูล GO:
$ sqlvet .
[!] No schema specified, will run without table and column validation.
Checked 10 SQL queries.
? Everything is awesome!
หมายเหตุ: รหัสที่ไม่สามารถเข้าถึงได้จะถูกข้าม
หากต้องการเปิดใช้งานการวิเคราะห์เชิงลึกเพิ่มเติมให้สร้างไฟล์กำหนดค่า sqlvet.toml ที่รูทของโครงการของคุณและระบุเส้นทางไปยังไฟล์สคีมาฐานข้อมูล:
$ cat ./sqlvet.toml
schema_path = "schema/full_schema.sql"
$ sqlvet .
Loaded DB schema from schema/full_schema.sql
table alembic_version with 1 columns
table incident with 13 columns
table usr with 4 columns
Exec @ ./pkg/incident.go:75:19
UPDATE incident SET oops = $1 WHERE id = $2
ERROR: column `oops` is not defined in table `incident`
Checked 10 SQL queries.
Identified 1 errors.
โดยค่าเริ่มต้น SQLVET ตรวจสอบการโทรทั้งหมดไปยังฟังก์ชั่นการสืบค้นใน database/sql , github.com/jmoiron/sqlx , github.com/jinzhu/gorm และห้องสมุด go-gorp/gorp อย่างไรก็ตามคุณสามารถกำหนดค่าเป็นฟังก์ชั่นการสืบค้นตามอำเภอใจสีขาวได้เช่นด้านล่าง:
[[ sqlfunc_matchers ]]
pkg_path = " github.com/mattermost/gorp "
[[ sqlfunc_matchers . rules ]]
query_arg_name = " query "
query_arg_pos = 0
[[ sqlfunc_matchers . rules ]]
query_arg_name = " sql "
query_arg_pos = 0 การกำหนดค่าข้างต้นบอก SQLVET เพื่อวิเคราะห์ฟังก์ชั่น/วิธีการใด ๆ จากแพ็คเกจ github.com/mattermost/gorp ที่มีพารามิเตอร์แรกที่มีชื่อว่า query หรือ sql
คุณยังสามารถจับคู่ฟังก์ชั่นการสืบค้นด้วยชื่อ:
[[ sqlfunc_matchers ]]
pkg_path = " github.com/jmoiron/sqlx "
[[ sqlfunc_matchers . rules ]]
func_name = " NamedExecContext "
query_arg_pos = 1 การกำหนดค่าข้างต้นบอก SQLVET เพื่อวิเคราะห์พารามิเตอร์ที่สองของฟังก์ชั่น/วิธีใด ๆ ที่ชื่อว่า NamedExecContext ใน github.com/jmoiron/sqlx แพ็คเกจ
หากต้องการข้ามบวกเท็จให้คำอธิบายประกอบบรรทัดที่เกี่ยวข้องกับ sqlvet: ignore ความคิดเห็น:
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}SQLVET ได้รับแรงบันดาลใจจาก SAFESQL และ SQLC