Reputation: 23597
I've got a long string literal in Go:
db.Exec("UPDATE mytable SET (I, Have, Lots, Of, Fields) = ('suchalongvalue', 'thisislongaswell', 'ohmansolong', 'wowsolong', 'loooooooooooooooooooooooooong')")
I see two ways to make this more manageable: raw quotes, or multiple concatenated quotes:
db.Exec(`UPDATE mytable SET (I, Have, Lots, Of, Fields)
= ('suchalongvalue', 'thisislongaswell', 'ohmansolong',
'wowsolong', 'loooooooooooooooooooooooooong')`)
db.Exec("UPDATE mytable SET (I, Have, Lots, Of, Fields) = " +
"('suchalongvalue', 'thisislongaswell', 'ohmansolong', " +
"'wowsolong', 'loooooooooooooooooooooooooong')")
The first feels more right, but the preceding spaces will be included in the string, making the resulting string have awkward runs of spaces in it. Is either of these considered idiomatic Go?
Upvotes: 32
Views: 20666
Reputation: 69
I prefer:
var updateStatement = `
UPDATE
mytable
SET
I = 'suchalongvalue'
,Have = 'thisislongaswell'
,Lots = 'ohmansolong'
,Of = 'wowsolong'
,Fields = 'loooooooooooooooooooooooooong'
`
func update(updateStatement string) {
db.Exec(updateStatement)
}
Should looks much more cleaner. At least thats been taught to me.
Upvotes: 5
Reputation: 185970
Since we're talking about SQL in this instance…
It is rare to pass string literals as column values in an INSERT
or UPDATE
. You'll almost always be passing in computed values from code, in which case it's far better to use parameterized queries. In the rare case where you do know a value at compile time, parameterization is still generally the right answer:
_, err := db.Exec(
`UPDATE mytable SET (I, Have, Lots, Of, Fields) = ($1, $2, $3, $4, $5)`,
"suchalongvalue",
"thisislongaswell",
"ohmansolong",
"wowsolong",
"loooooooooooooooooooooooooong")
Upvotes: 1
Reputation: 117
This is what I do:
q := `UPDATE mytable SET (I, Have, Lots, Of, Fields) = ` +
`('suchalongvalue', ` +
`'thisislongaswell', ` +
`'wowsolong', ` +
`loooooooooooooooooooooooooong')`
db.Exec(q)
I think it looks a lot cleaner
Upvotes: 9
Reputation: 23108
It looks weird putting the long string literal in the parameter like that. I would prefer:
const updateQuery=`
UPDATE mytable SET (I, Have, Lots, Of, Fields)
= ('suchalongvalue', 'thisislongaswell', 'ohmansolong',
'wowsolong', 'loooooooooooooooooooooooooong')`
func doUpdate(){
db.Exec(updateQuery)
}
I also prefer a single newline at the beginning to the odd spaces in each line. That way you can kill it with strings.Trim
if it causes problems.
Upvotes: 5
Reputation: 2497
You could do:
s := `UPDATE mytable SET (I, Have, Lots, Of, Fields) = `
s += `('suchalongvalue', `
s += `'thisislongaswell', `
s += `'wowsolong', `
s += `loooooooooooooooooooooooooong')`
db.Exec(s)
Upvotes: 2