1
入力はstrings.Reader
です。入力があれば、私はそれからid
を抽出して印刷しています。次に、元の入力を他のタスクを実行する汎用関数に渡します。私がオリジナルを再利用すると考えることができる唯一の方法は、コンテンツを読んでそれをbytes.Reader
に2回渡すことです。元のstrings.ReaderをGoに再利用するにはどうすればよいですか?
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.Readerも同様であるいずれかの文字列の先頭に求めることができます。 'var _ io.Seeker =(* strings.Reader)(nil)// ok' – Darigaaz