我有一个类型的输入strings.Reader。给定输入,我从中提取id并打印出来。然后,我将原始输入传递给在其上执行其他任务的通用函数。我能想到重用原件的唯一方法是阅读内容并将其传递给 abytes.Reader两次。以下是在 Go 中实现这一目标的唯一方法吗?package mainimport ( "bytes" "encoding/json" "fmt" "io" "io/ioutil" "log" "strings") type Food struct { Id int `json:"id"` Name string `json:"name"`} func genericFunction(body io.Reader) { content, err := ioutil.ReadAll(body) if err != nil { log.Fatal(err) } fmt.Println(string(content))} func main() { // Original input reader := strings.NewReader("{\"id\": 10, \"name\": \"Pie\"}") original, err := ioutil.ReadAll(reader) if err != nil { log.Fatal(err) } foodReader := bytes.NewReader(original) decoder := json.NewDecoder(foodReader) var food Food decoder.Decode(&food) fmt.Println("About to eat food", food.Id) foodReader = bytes.NewReader(original) genericFunction(foodReader)}
1 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
strings.Reader您可以使用或回溯到字符串的开头bytes.Reader
reader := bytes.NewReader([]byte("{\"id\": 10, \"name\": \"Pie\"}"))
decoder := json.NewDecoder(reader)
var food Food
decoder.Decode(&food)
fmt.Println("About to eat food", food.Id)
reader.Seek(0, 0)
genericFunction(reader)
- 1 回答
- 0 关注
- 192 浏览
添加回答
举报
0/150
提交
取消