template strings es6 ecmascript string go literals idioms

strings - template string javascript html



La mejor práctica para literales largos de cadena en Go (4)

Tengo una larga cadena literal en Ir:

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

Veo dos formas de hacerlo más manejable: comillas sin formato o múltiples comillas concatenadas:

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

El primero se siente más bien, pero los espacios precedentes se incluirán en la cadena, haciendo que la cadena resultante tenga torpes carreras de espacios. ¿Alguno de estos se considera idiomático Go?


Podrías hacerlo:

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


Parece extraño poner la cadena larga literal en el parámetro así. Yo preferiría:

const updateQuery=` UPDATE mytable SET (I, Have, Lots, Of, Fields) = (''suchalongvalue'', ''thisislongaswell'', ''ohmansolong'', ''wowsolong'', ''loooooooooooooooooooooooooong'')` func doUpdate(){ db.Exec(updateQuery) }

También prefiero una nueva línea al principio para los espacios impares en cada línea. De esa forma puedes matarlo con strings.Trim si causa problemas.


Esto es lo que hago:

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

Creo que se ve mucho más limpio


Ya que estamos hablando de SQL en esta instancia ...

Es raro pasar literales de cadena como valores de columna en INSERT o UPDATE . Casi siempre pasará valores calculados desde el código, en cuyo caso es mucho mejor usar consultas parametrizadas. En el raro caso en que se conoce un valor en tiempo de compilación, la parametrización sigue siendo, en general, la respuesta correcta:

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