Aby odpowiedzieć na pytanie, jak sformatować ciąg, prostą odpowiedzią jest użycie fmt.Sprintf aby ustrukturyzować swój ciąg. Jednak patrz dalej, aby uzyskać krótką notatkę na temat używania fmt.Sprintf do zapytań db:
Przykład:
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)
Używając tego do zapytań, jesteś bezpieczny przed zastrzykami. Biorąc to pod uwagę, możesz ulec pokusie, aby to zmodyfikować i użyć db.Exec również do tworzenia/aktualizacji/usuwania. Ogólna zasada:jeśli używasz db.Exec z fmt.Sprintf i nie oczyszczasz najpierw swoich danych wejściowych, otwierasz się na wstrzyknięcia sql .
GoPlay z prostym przykładem, dlaczego fmt.Sprintf z db.Exec jest złe:
https://play.golang.org/p/-IWyymAg_Q
Powinieneś użyć db.Query lub db.Prepare w odpowiedni sposób, aby uniknąć tego rodzaju wektorów ataku. Być może będziesz musiał zmodyfikować powyższy przykładowy kod, aby uzyskać fragment bezpieczny dla wstrzyknięć, ale mam nadzieję, że dałem wystarczająco dużo, aby zacząć.