我输入的类型为strings.Reader
。鉴于输入,我从中提取id
并将其打印出来。然后,我将原始输入传递给在其上执行其他任务的通用函数。我能想到重用原文的唯一方法是阅读内容并将其传递给bytes.Reader
两次。
以下是在Go中实现这一目标的唯一方法吗?
package main
import (
"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)
}
答案 0 :(得分:0)
您可以使用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)