我无法file.ReadLine
在Go中找到功能.我可以弄清楚如何快速写一个,但只是想知道我是否在这里忽略了一些东西.如何逐行读取文件?
我试图从控制台(包括空格)读取整行,然后处理它.使用bufio.ReadString,换行字符与输入一起读取,所以我想出了以下代码来修剪换行符:
input,_:=src.ReadString('\n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string
Run Code Online (Sandbox Code Playgroud)
有没有比较惯用的方法呢?也就是说,在为您提取子字符串时,是否已有一个处理结束空字节的库?
(是的,我知道有一种方法可以在go readline - > string中读取没有换行符的行,但我正在寻找更优雅的字符串操作.)
我有一个文本文件,其中每一行代表一个JSON对象.我正在使用这样的简单for
循环在Go中处理此文件:
scanner := bufio.NewScanner(file)
for scanner.Scan() {
jsonBytes = scanner.Bytes()
var jsonObject interface{}
err := json.Unmarshal(jsonBytes, &jsonObject)
// do stuff with "jsonObject"...
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
Run Code Online (Sandbox Code Playgroud)
当此代码到达具有特别大的JSON字符串(~67kb)的行时,我收到错误消息"bufio.Scanner:token too long".
是否有一种简单的方法可以增加可读的最大行数NewScanner
?或者是否有另一种方法可以完全采取,当需要读取太大NewScanner
但不知道通常不安全的线路?
我需要将一个整数文件读入一个数组.我有这个工作:
package main
import (
"fmt"
"io"
"os"
)
func readFile(filePath string) (numbers []int) {
fd, err := os.Open(filePath)
if err != nil {
panic(fmt.Sprintf("open %s: %v", filePath, err))
}
var line int
for {
_, err := fmt.Fscanf(fd, "%d\n", &line)
if err != nil {
fmt.Println(err)
if err == io.EOF {
return
}
panic(fmt.Sprintf("Scan Failed %s: %v", filePath, err))
}
numbers = append(numbers, line)
}
return
}
func main() {
numbers := readFile("numbers.txt")
fmt.Println(len(numbers))
}
Run Code Online (Sandbox Code Playgroud)
文件numbers.txt只是:
1
2
3 …
Run Code Online (Sandbox Code Playgroud) Go的新手并遇到如下问题:
var metrics bytes.Buffer
metrics.WriteString("foo")
metrics.WriteString("\n")
metrics.WriteString("bar")
metrics.WriteString("\n")
Run Code Online (Sandbox Code Playgroud)
现在我想循环遍历这些指标并按换行分割.我试过了
for m := strings.Split(metrics.String(), "\n") {
log.Printf("metric: %s", m)
}
Run Code Online (Sandbox Code Playgroud)
但我得到以下内容
./relay.go:71: m := strings.Split(metrics.String(), "\n") used as value
Run Code Online (Sandbox Code Playgroud)