【问题标题】:indentation style for multi-line string literals多行字符串文字的缩进样式
【发布时间】:2015-01-23 15:42:05
【问题描述】:

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

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

我找到了这个问题,但我还是不清楚: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
    }
}

【问题讨论】:

    标签: go


    【解决方案1】:

    考虑到这两个命题都会在文字字符串中添加换行符或空格,我会赞成(即使fmt format the first line):

        select, err = db.Prepare(
         `select name
    from table
    where id=$1`)
    

    作为下面的OP akonsu cmets,看起来和golang代码本身的风格是一致的,如src/cmd/go/main.go#L175所见,将第一行保持在开头'('的水平

    var usageTemplate = `Go is a tool for managing Go source code.
    Usage:
    go command [arguments]
    ...
    `
    

    【讨论】:

    • 好的,但是这个行不通,因为go fmt 会缩进第一行。
    • @akonsu 这就是我刚刚看到的。我已经相应地编辑了答案。
    • 谢谢。这与golang代码本身的风格一致:golang.org/src/cmd/go/main.go#L174
    • 打破周围代码缩进的方式非常丑陋......这可能是最好的解决方案,但它不是一个好的解决方案。例如,将 ruby​​ 的 squiggly heredoc solution 与同样的问题进行比较。
    • @Jonah 我同意。不过,我还没有看到 Go 2 的任何演变...github.com/golang/go/…
    【解决方案2】:

    关于 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
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2011-01-31
      • 1970-01-01
      • 2011-03-22
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多