多行字符串文字的缩进样式

ako*_*nsu 5 go

缩进原始字符串文字的建议样式是什么?如果我根据第一行缩进,则它在具有不同制表符长度的编辑器中可能无法正确对齐。例如:

if select == nil {
    select, err = db.Prepare(`select name
                              from table
                              where id=$1`)
    if err != nil {
        return nil, err
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经找到了这个问题,但是我仍然不清楚:Go中长字符串文字的最佳实践

我应该像下面这样吗?

if select == nil {
    select, err = db.Prepare(`
select name
from table
where id=$1`)
    if err != nil {
        return nil, err
    }
}
Run Code Online (Sandbox Code Playgroud)

Éti*_*sac 6

您可能对github.com/lithammer/dedent包感兴趣,它提供了类似于 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
    }
}
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 3

考虑到这两个命题都会在字符串中添加换行符或空格,我会赞成(即使fmt格式化第一行):

    select, err = db.Prepare(
     `select name
from table
where id=$1`)
Run Code Online (Sandbox Code Playgroud)

正如下面的OP akonsu 评论,它似乎与 golang 代码本身的风格一致,如 中所示src/cmd/go/main.go#L175,它将第一行保持在开头 ' ('的级别

var usageTemplate = `Go is a tool for managing Go source code.
Usage:
go command [arguments]
...
`
Run Code Online (Sandbox Code Playgroud)

  • @乔纳我同意。不过,我还没有看到针对 Go 2 提出的任何演变... https://github.com/golang/go/issues?page=1&q=is%3Aopen+is%3Aissue+label%3AGo2+string+literal&utf8=% E2%9C%93 (2认同)