繁体   English   中英

Go:用换行符分割byte.Buffer

[英]Go: split byte.Buffer by newline

Go的新手并遇到如下问题:

var metrics bytes.Buffer

metrics.WriteString("foo")
metrics.WriteString("\n")

metrics.WriteString("bar")
metrics.WriteString("\n")

现在我想循环遍历这些指标并按换行分割。 我试过了

for m := strings.Split(metrics.String(), "\n") {
     log.Printf("metric: %s", m)
}

但我得到以下内容

./relay.go:71: m := strings.Split(metrics.String(), "\n") used as value

您可以使用bufio.Scanner执行此bufio.Scanner
Godoc在http://golang.org/pkg/bufio/#Scanner

像这样的东西:

var metrics bytes.Buffer

metrics.WriteString("foo")
metrics.WriteString("\n")

metrics.WriteString("bar")
metrics.WriteString("\n")

scanner := bufio.NewScanner(&metrics)
for scanner.Scan() {
    log.Printf("metric: %s", scanner.Text())
}

if err := scanner.Err(); err != nil {
    log.Fatal(err)
}

这里有一个完整的例子: http//play.golang.org/p/xrFEGF3h5P

考虑到strings.Split()返回一个数组,使用范围会更容易

m := strings.Split(metrics.String(), "\n")
for _, m := range strings.Split(metrics.String(), "\n") {
    log.Printf("metric: %s", m)
}

注意,要从字符串中读取行,您可以考虑“ go readline - > string ”:

bufio.ReadLine()或更好: bufio.Scanner

如:

const input = "Now is the winter of our discontent,\nMade glorious summer by this sun of York.\n"
scanner := bufio.NewScanner(strings.NewReader(input))

有关详细信息,请参阅“ 扫描仪提前终止 ”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM