我正在尝试编写一个函数来继续从缓冲读取器读取,直到我遇到某个字符串,然后停止读取并返回在该字符串之前读取的所有内容。
换句话说,我想做和做一样的事情reader.ReadString()
,除了用一个字符串而不是一个字节。
例如:
mydata, err := reader.ReadString("\r\n.\r\n") //obviously will not compile
我怎样才能做到这一点?
提前致谢,
特威奇
修正 1:先前的尝试
这是我之前的尝试;它写得不好并且不起作用,但希望它证明了我正在尝试做的事情。
func readDotData(reader *bufio.Reader)(string, error){
delims := []byte{ '\r', '\n', '.', '\r', '\n'}
curpos := 0
var buffer []byte
for {
curpos = 0
data, err := reader.ReadSlice(delims[0])
if err!=nil{ return "", err }
buffer = append(buffer, data...)
for {
curpos++
b, err := reader.ReadByte()
if err!=nil{ return "", err }
if b!=delims[curpos]{
for curpos >= 0{
buffer = append(buffer, delims[curpos])
curpos--
}
break
}
if curpos == len(delims){
return string(buffer[len(buffer)-1:]), nil
}
}
}
panic("unreachable")
}