为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中重用原始 strings.Reader?

如何在 Go 中重用原始 strings.Reader?

Go
慕桂英546537 2022-03-03 16:07:23
我有一个类型的输入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)


查看完整回答
反对 回复 2022-03-03
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信