Adaptor

Hertz provides access and related methods to Go standard library http.Request and http.ResponseWriter.

Hertz provides access and related methods to Go standard library http.Request and http.ResponseWriter, it is easy for users to integrate net/http to develop application.

Note: This adaptation comes at a performance penalty

Example

package main

import (
	"context"
	"fmt"
	"net/http"

	"github.com/cloudwego/hertz/pkg/app"
	"github.com/cloudwego/hertz/pkg/app/server"
	"github.com/cloudwego/hertz/pkg/common/adaptor"
)

func handler(w http.ResponseWriter, r *http.Request) {
	w.WriteHeader(200)

	_, err := w.Write([]byte("Hello World"))
	if err != nil {
		fmt.Println(err)
		return
	}
}

func main() {
	h := server.Default()

	h.GET("/hello", func(ctx context.Context, c *app.RequestContext) {
		req, err := adaptor.GetCompatRequest(&c.Request)
		if err != nil {
			fmt.Println(err)
			return
		}
		// You may build more logic on req
		fmt.Println(req.URL.String())

		// caution: don't pass in c.GetResponse() as it return a copy of response
		rw := adaptor.GetCompatResponseWriter(&c.Response)

		handler(rw, req)
	})

	h.Spin()
}

http.Request

FunctionFunction SignatureDescription
GetCompatRequestfunc GetCompatRequest(req *protocol.Request) (*http.Request, error)Build and fetch Go standard library http.Request from Hertz protocol.Request
CopyToHertzRequestfunc CopyToHertzRequest(req *http.Request, hreq *protocol.Request)Copy the URI, Host, Method, Protocol, Header of Go standard library http.Request to Hertz protocol.Request, The Body field will be adapted by sharing Reader

http.ResponseWriter

Function / StructFunction SignatureDescription
GetCompatResponseWriterfunc GetCompatResponseWriter(resp *protocol.Response) http.ResponseWriterBuild and fetch Go standard library http.ResponseWriter from Hertz protocol.Response
compatResponse/compatResponse implements the http.ResponseWriter interface and has adaptations to Header, Write and WriteHeader functions

Handler

Hertz pprof middleware provides adaptation methods for the Go standard library http.Handler and http.HandlerFunc, it is easy for users to adapt to Hertz app.HandlerFunc for development.

FunctionFunction SignatureDescription
NewHertzHTTPHandlerFuncfunc NewHertzHTTPHandlerFunc(h http.HandlerFunc) app.HandlerFuncUsed to convert Go standard library http.HandlerFunc to Hertz app.HandlerFunc
NewHertzHTTPHandlerfunc NewHertzHTTPHandler(h http.Handler) app.HandlerFuncUsed to convert Go standard library http.Handler to Hertz app.HandlerFunc

Note

  • When modifying the resp header in the server handler, please use write function to write the header. Otherwise, the modification will not take effect.
func handler(resp http.ResponseWriter, req *http.Request) {
    resp.Header().Add("Content-Encoding", "test")
    _, err := resp.Write([]byte("Content-Encoding: test\n"))
    if err != nil {
        panic(err)
    }
}

Refer to hertz-example and pprof for more information


Last modified November 29, 2024 : Update protobuf.md (#1176) (16ce168)