1
입력이 strings.Reader
입니다. 입력이 주어지면 id
을 추출하여 출력하고 있습니다. 그런 다음 원래 입력을 다른 작업을 수행하는 일반 함수에 전달합니다. 원본을 재사용 할 수있는 유일한 방법은 콘텐츠를 읽고 bytes.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