英文:
indentation style for multi-line string literals
问题
原始字符串字面值的缩进风格有多种方式。如果根据其第一行进行缩进,可能在具有不同制表符长度的编辑器中无法正确对齐。例如:
if select == nil {
select, err = db.Prepare(`select name
from table
where id=$1`)
if err != nil {
return nil, err
}
}
我找到了这个问题,但我仍然不清楚:https://stackoverflow.com/questions/20940194/best-practice-for-long-string-literals-in-go
我应该像下面这样做吗?
if select == nil {
select, err = db.Prepare(`
select name
from table
where id=$1`)
if err != nil {
return nil, err
}
}
英文:
What is the proposed style for indenting a raw string literal? If I indent it based on its first line, it might not align properly in editors that have a different tab length. For example:
if select == nil {
select, err = db.Prepare(`select name
from table
where id=$1`)
if err != nil {
return nil, err
}
}
I have found this question, but I am still unclear: https://stackoverflow.com/questions/20940194/best-practice-for-long-string-literals-in-go
Should I do it like below?
if select == nil {
select, err = db.Prepare(`
select name
from table
where id=$1`)
if err != nil {
return nil, err
}
}
答案1
得分: 5
你可能对github.com/lithammer/dedent包感兴趣,它提供了类似于Python标准库中的textwrap.dedent()的功能。
if select == nil {
select, err = db.Prepare(dedent.Dedent(`
select name
from table
where id=$1
`))
if err != nil {
return nil, err
}
}
英文:
You may be interrested by github.com/lithammer/dedent package which provide something similar to Python std textwrap.dedent().
if select == nil {
select, err = db.Prepare(dedent.Dedent(`
select name
from table
where id=$1
`)
if err != nil {
return nil, err
}
}
答案2
得分: 3
考虑到两个命题都会在字符串中添加换行符或空格,我更倾向于以下写法(尽管fmt
格式化第一行):
select, err = db.Prepare(
`select name
from table
where id=$1`)
正如OP akonsu在下面的评论中所提到的,这似乎与golang代码本身的风格一致,就像在src/cmd/go/main.go#L175
中所看到的那样,它将第一行保持在开头的(
的级别上。
var usageTemplate = `Go is a tool for managing Go source code.
Usage:
go command [arguments]
...
`
英文:
Considering both propositions would add newline or spaces to the litteral string, I would favor (even though fmt
format the first line):
select, err = db.Prepare(
`select name
from table
where id=$1`)
As the OP akonsu comments below, it seems consistent with the style of the golang code itself, as seen in src/cmd/go/main.go#L175
, which keeps the first line at the level of the opening '(
'
var usageTemplate = `Go is a tool for managing Go source code.
Usage:
go command [arguments]
...
`
答案3
得分: 0
关于SQL,空格并不重要,所以这只是个人偏好。在我的情况下,由于SQL是一种与Go不同的语言,我喜欢确保SQL代码与Go代码不共用一行:
if select == nil {
select, err = db.Prepare(`
select name
from table
where id = $1
`)
if err != nil {
return nil, err
}
}
英文:
Regarding SQL, the whitespace doesn't matter, so it's just a personal preference. In my case, as SQL is a different language from Go, I like to make sure that the SQL code shares no lines with Go code:
if select == nil {
select, err = db.Prepare(`
select name
from table
where id = $1
`)
if err != nil {
return nil, err
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论