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
答案 0 :(得分:11)
您可以使用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
答案 1 :(得分:4)
考虑到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))
点击“Scanner terminating early”了解更多信息。