web-dev-qa-db-ja.com

Goでの長い文字列リテラルのベストプラクティス

Goに長い文字列リテラルがあります:

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

これをより管理しやすくする2つの方法があります。生の引用符、または複数の連結された引用符です。

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

最初の方が正しいと感じますが、前のスペースが文字列に含まれるため、結果の文字列には厄介なスペースの実行が含まれます。これらのいずれかは慣用的なGoと見なされますか?

21
joshlf

そのようなパラメータに長い文字列リテラルを入れるのは奇妙に見えます。を好む:

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

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

また、各行の奇数スペースよりも、最初に1つの改行を使用することをお勧めします。そうすれば、問題が発生した場合にstrings.Trimで強制終了できます。

4
captncraig

これが私がすることです:

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

db.Exec(q)

かなりきれいに見えると思います

2

あなたができること:

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

db.Exec(s)
1

私が好む:

var updateStatement = `
    UPDATE
        mytable
    SET
        I = 'suchalongvalue'
        ,Have = 'thisislongaswell'
        ,Lots = 'ohmansolong'
        ,Of = 'wowsolong'
        ,Fields = 'loooooooooooooooooooooooooong'
`
func update(updateStatement string) {
    db.Exec(updateStatement)
}

はるかにきれいに見えるはずです。少なくともそれは私に教えられました。

0
Phong