How do you write multiline strings in Go?

前端 未结 9 915
傲寒
傲寒 2020-12-07 07:25

Does Go have anything similar to Python\'s multiline strings:

\"\"\"line 1
line 2
line 3\"\"\"

相关标签:
9条回答
  • 2020-12-07 07:39

    You can write:

    "line 1" +
    "line 2" +
    "line 3"
    

    which is the same as:

    "line 1line 2line 3"
    

    Unlike using back ticks, it will preserve escape characters. Note that the "+" must be on the 'leading' line - for instance, the following will generate an error:

    "line 1"
    +"line 2"
    
    0 讨论(0)
  • 2020-12-07 07:41

    Go and multiline strings

    Using back ticks you can have multiline strings:

    package main
    
    import "fmt"
    
    func main() {
    
        message := `This is a 
    Multi-line Text String
    Because it uses the raw-string back ticks 
    instead of quotes.
    `
    
        fmt.Printf("%s", message)
    }
    

    Instead of using either the double quote (“) or single quote symbols (‘), instead use back-ticks to define the start and end of the string. You can then wrap it across lines.

    If you indent the string though, remember that the white space will count.

    Please check the playground and do experiments with it.

    0 讨论(0)
  • 2020-12-07 07:41

    You can put content with `` around it, like

    var hi = `I am here,
    hello,
    `
    
    0 讨论(0)
  • 2020-12-07 07:44

    According to the language specification you can use a raw string literal, where the string is delimited by backticks instead of double quotes.

    `line 1
    line 2
    line 3`
    
    0 讨论(0)
  • 2020-12-07 07:46

    You have to be very careful on formatting and line spacing in go, everything counts and here is a working sample, try it https://play.golang.org/p/c0zeXKYlmF

    package main
    
    import "fmt"
    
    func main() {
        testLine := `This is a test line 1
    This is a test line 2`
        fmt.Println(testLine)
    }
    
    0 讨论(0)
  • 2020-12-07 07:48

    Use raw string literals for multi-line strings:

    func main(){
        multiline := `line 
    by line
    and line
    after line`
    }
    

    Raw string literals

    Raw string literals are character sequences between back quotes, as in `foo`. Within the quotes, any character may appear except back quote.

    A significant part is that is raw literal not just multi-line and to be multi-line is not the only purpose of it.

    The value of a raw string literal is the string composed of the uninterpreted (implicitly UTF-8-encoded) characters between the quotes; in particular, backslashes have no special meaning...

    So escapes will not be interpreted and new lines between ticks will be real new lines.

    func main(){
        multiline := `line 
    by line \n
    and line \n
    after line`
    
        // \n will be just printed. 
        // But new lines are there too.
        fmt.Print(multiline)
    }
    

    Concatenation

    Possibly you have long line which you want to break and you don't need new lines in it. In this case you could use string concatenation.

    func main(){
        multiline := "line " +
                "by line " +
                "and line " +
                "after line"
    
        fmt.Print(multiline) // No new lines here
    }
    

    Since " " is interpreted string literal escapes will be interpreted.

    func main(){
        multiline := "line " +
                "by line \n" +
                "and line \n" +
                "after line"
    
        fmt.Print(multiline) // New lines as interpreted \n
    }
    
    0 讨论(0)
提交回复
热议问题