如何用Golang中的div包装每一行?

时间:2016-08-22 19:40:35

标签: go

我有一个文字段落。

我想用div包装每一行。

例如,如果文本字符串看起来像这样

Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. 

Nam eget lectus porta metus aliquam tincidunt sed vel enim.

然后我想像这样包装它

<div>Lorem ipsum dolor sit amet,</div> 
<div>consectetur adipiscing elit.</div> 
<div><br/></div>
<div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>

有人可以告诉我什么是正确的方法吗?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用bytes.Bufferbufio.NewScanner,例如此工作示例代码:

package main

import "fmt"
import "strings"
import "bufio"
import "bytes"

func main() {
    r := strings.NewReader(`Lorem ipsum dolor sit amet,
consectetur adipiscing elit.

Nam eget lectus porta metus aliquam tincidunt sed vel enim.`)

    buf := &bytes.Buffer{}
    scanner := bufio.NewScanner(r)
    for scanner.Scan() {
        s := scanner.Text()
        if len(s) == 0 {
            s = `<br/>`
        }
        buf.WriteString(`<div>` + s + `</div>
`)
    }
    fmt.Println(buf.String())
}

输出:

<div>Lorem ipsum dolor sit amet,</div>
<div>consectetur adipiscing elit.</div>
<div><br/></div>
<div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>

您可以使用bytes.Bufferhtml/template
但是你有<div></div>而不是<div><br/></div>,那么你可以使用

s = strings.Replace(s, `<div></div>`, `<div><br/></div>`, -1)

就像这个工作示例代码:

package main

import "fmt"
import "bytes"
import "html/template"
import "strings"

func main() {
    r := []string{`Lorem ipsum dolor sit amet,`,
        `consectetur adipiscing elit.`,
        ``,
        `Nam eget lectus porta metus aliquam tincidunt sed vel enim.`}
    buf := &bytes.Buffer{}
    t := template.Must(template.New("template").Parse("{{range .}}<div>{{.}}</div>\n{{end}}"))
    t.Execute(buf, r)
    s := buf.String()
    s = strings.Replace(s, `<div></div>`, `<div><br/></div>`, -1)
    fmt.Println(s)
}

输出:

<div>Lorem ipsum dolor sit amet,</div>
<div>consectetur adipiscing elit.</div>
<div><br/></div>
<div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div>

答案 1 :(得分:1)

对于从一片行生成HTML片段的部分,您应该使用以下代码,该代码负责正确转义HTML。

package main

import (
    "html/template"
    "os"
)

func main() {
    data := []string{
        "first",
        "second",
        "<style>body{background-color:lime;}</style>",
        "<script>alert('evil')</script>",
    }
    htmlTemplate := "{{range .}}<div>{{.}}</div>\n{{end}}"

    tmpl := template.Must(template.New("").Parse(htmlTemplate))
    tmpl.Execute(os.Stdout, data)
}