literal - Best practice per i letterali a stringa lunga in Go



golang structure (3)

Potresti fare:

s := `UPDATE mytable SET (I, Have, Lots, Of, Fields) = `
s += `('suchalongvalue', `
s += `'thisislongaswell', `
s += `'wowsolong', `
s += `loooooooooooooooooooooooooong')`

db.Exec(s)

Ho una lunga stringa letterale in Go:

db.Exec("UPDATE mytable SET (I, Have, Lots, Of, Fields) = ('suchalongvalue', 'thisislongaswell', 'ohmansolong', 'wowsolong', 'loooooooooooooooooooooooooong')")

Vedo due modi per renderlo più gestibile: virgolette semplici o virgolette multiple concatenate:

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')")

Il primo sembra più giusto, ma gli spazi precedenti saranno inclusi nella stringa, facendo in modo che la stringa risultante abbia degli scomodi passaggi di spazi. Qualcuno di questi è considerato idiomatico?


Answer #1

Sembra strano mettere la stringa lunga letterale nel parametro come quello. Preferirei:

const updateQuery=`
UPDATE mytable SET (I, Have, Lots, Of, Fields) 
= ('suchalongvalue', 'thisislongaswell', 'ohmansolong', 
'wowsolong', 'loooooooooooooooooooooooooong')`

func doUpdate(){
  db.Exec(updateQuery)
}

Preferisco anche una singola riga all'inizio degli spazi dispari in ogni riga. In questo modo puoi ucciderlo con le strings.Trim se causa problemi.


Answer #2

Dato che stiamo parlando di SQL in questa istanza ...

È raro passare letterali stringa come valori di colonna in un INSERT o UPDATE . Passerai quasi sempre da valori calcolati dal codice, nel qual caso è molto meglio usare query parametrizzate. Nel raro caso in cui si conosce un valore in fase di compilazione, la parametrizzazione è ancora generalmente la risposta corretta:

_, err := db.Exec(
    `UPDATE mytable SET (I, Have, Lots, Of, Fields) = ($1, $2, $3, $4, $5)`,
    "suchalongvalue",
    "thisislongaswell",
    "ohmansolong",
    "wowsolong",
    "loooooooooooooooooooooooooong")




idioms