gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:22:50 25 4
gpt4 key购买 nike

我有一个类型为 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)
}

最佳答案

您可以使用 strings.Readerbytes.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)

关于go - 如何在 Go 中重用原始的 strings.Reader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39154285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com