Để trả lời câu hỏi của bạn về cách định dạng chuỗi, câu trả lời đơn giản là sử dụng fmt.Sprintf để cấu trúc chuỗi của bạn. Tuy nhiên xem thêm để biết ghi chú nhanh về cách sử dụng fmt.Sprintf cho các truy vấn db:
Ví dụ:
query := fmt.Sprintf("SELECT id FROM users WHERE login='%s'", login)
err = db.Query(query)
// Equivalent to:
rows, err := db.Query("SELECT id FROM users WHERE login=?", login)
Sử dụng cái này cho các câu hỏi, bạn sẽ an toàn khi tiêm. Điều đó đang được nói, bạn có thể bị cám dỗ để sửa đổi điều này và sử dụng db.Exec cho các sáng tạo / cập nhật / xóa. Theo nguyên tắc chung, nếu bạn sử dụng db.Exec với fmt.Sprintf và không khử trùng đầu vào của bạn trước, bạn sẽ tự mở để tiêm sql .
GoPlay với ví dụ đơn giản về lý do tại sao fmt.Sprintf với db.Exec kém:
https://play.golang.org/p/-IWyymAg_Q
Bạn nên sử dụng db.Query hoặc db.Prepare theo cách thích hợp để tránh các loại vectơ tấn công này. Bạn có thể phải sửa đổi mẫu mã ở trên để tạo ra đoạn mã tiêm an toàn, nhưng hy vọng tôi đã cung cấp đủ cho bạn để bắt đầu.