我对 Go 很陌生,所以我可能会误解 Go 的异步/流处理的一些基础知识,但是这里有......
我正在尝试在我编写的处理流的函数上使用银杏编写一些测试。
处理端从文件中读取以换行符分隔的文本,直到遇到一个特殊的分隔符行,此时它会尝试将文本解析为 JSON。代码如下所示:
func ParseConfig(inStream *os.File) (Config, error){
var header string
var stdin = bufio.NewScanner(inStream)
for stdin.Scan() {
line := stdin.Text()
if line == "|||" {
break;
}
header += line
}
// parse JSON here and return
}
我的测试看起来像这样
Describe("ParseConfig()", func() {
It("should pass for a valid header", func(){
_, err := io.WriteString(stream, "{\"Key\": \"key\", \"File\": \"file\"}\n|||\n")
Expect(err).NotTo(HaveOccurred())
conf, err := parser.ParseConfig(stream)
Expect(err).NotTo(HaveOccurred())
Expect(conf.Key).To(Equal("key"))
})
})
不幸的是,这会产生一个 JSON 解析错误,因为它试图解析一个空字符串。我假设我的问题是我在告诉 ParseConfig() 函数在该字符串上侦听数据之前在流上发送字符串?但我并不完全清楚如何重构它以使用正确的 go 例程首先侦听数据然后发送它。
我看到的一些潜在解决方案是围绕“通道”的使用(我不熟悉),但我担心这一需求可能不值得进行重大重构以引入全新的并发范式。
谢谢!