我有一個類型的輸入strings.Reader。給定輸入,我從中提取id并打印出來。然后,我將原始輸入傳遞給在其上執(zhí)行其他任務(wù)的通用函數(shù)。我能想到重用原件的唯一方法是閱讀內(nèi)容并將其傳遞給 abytes.Reader兩次。以下是在 Go 中實(shí)現(xiàn)這一目標(biāo)的唯一方法嗎?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貢獻(xiàn)1818條經(jīng)驗 獲得超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 關(guān)注
- 214 瀏覽
添加回答
舉報
0/150
提交
取消