반응형
IO를 변환하는 가장 효율적인 방법읽기바이트 배열에 근접
나는 매우 간단한 Go 웹 서버를 가지고 있다.이 작업은 인바운드 json 페이로드 수신입니다.그런 다음 바이트 배열이 예상되는 하나 이상의 서비스에 페이로드를 게시합니다.payload는 확인할 필요가 없습니다.방금 보냈어요.
이 경우 인바운드 작업을 수신하여 Google PubSub으로 전송합니다.다른 서비스일 수도 있어요.그건 별로 중요하지 않아요.먼저 디코딩하지 않고 객체를 바이트 배열로 변환할 수 있는 가장 효율적인 방법을 찾고 있습니다.
왜일까요? 한 서버에서 JSON을 디코딩하고 변환한 후 나중에 마샬링 해제하는 것은 다소 낭비인 것 같습니다.게다가 두 개의 동일한 구조를 두 개의 패키지로 유지하고 싶지 않습니다.
IO 변환은 어떻게 가능합니까?ReadCloser는 바이트 배열에 가까우므로 마샬링을 한 번만 해제하면 됩니다.나는 다음과 같은 대답을 시도했지만 그것이 가장 효율적인 방법이라고 생각하지 않는다.
http 서버 코드는 다음과 같습니다.
func Collect(d DbManager) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
code := 422
obj := Report{}
response := Response{}
response.Message = "Invalid request"
decoder := json.NewDecoder(r.Body)
decoder.Decode(&obj)
if obj.Device.MachineType != "" {
msg,_ := json.Marshal(obj)
if d.Publish(msg, *Topic) {
code = 200
}
response.Message = "Ok"
}
a, _ := json.Marshal(response)
w.WriteHeader(code)
w.Write(a)
return
})
}
판독기를 읽음으로써 판독기를 바이트로 변환합니다.그렇게 하는 데 더 효율적인 방법은 없습니다.
body, err := ioutil.ReadAll(r.Body)
에서 무조건 바이트를 전송하는 경우io.Reader
에 대해서io.Writer
, 를 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/39945968/most-efficient-way-to-convert-io-readcloser-to-byte-array
반응형
'programing' 카테고리의 다른 글
Angular HttpPromise: "success"/"error" 메서드와 "then" 인수 간의 차이 (0) | 2023.03.14 |
---|---|
Ajax 및 키 프레스를 사용하여 검색 최적화 (0) | 2023.03.14 |
양호한 JWT 인증 필터 설계 방법 (0) | 2023.03.14 |
POSTMAN에 객체가 존재하는지 확인하는 방법 (0) | 2023.03.14 |
$scope에서 컨트롤러 이름 가져오기 (0) | 2023.03.14 |