render

package
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 30, 2021 License: MIT Imports: 10 Imported by: 1

README

render

Package render supports rendering for the http.ResponseWriter.

Features

  • JSON
  • XML
  • Redirect
  • Text
  • File
  • Body
  • Gzip
  • Deflate
  • Template

Get started

Install
go get github.com/hslam/handler
Import
import "github.com/hslam/handler"
Usage
HelloWorld Example
package main

import (
	"github.com/hslam/handler/render"
	"github.com/hslam/mux"
	"log"
	"net/http"
)

func main() {
	r := render.NewRender()
	m := mux.New()
	m.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
		r.Text(w, req, "Hello world", http.StatusOK)
	}).All()
	log.Fatal(http.ListenAndServe(":8080", m))
}

curl http://localhost:8080/

Hello world
Gzip/Deflate Example
package main

import (
	"github.com/hslam/handler/render"
	"github.com/hslam/mux"
	"log"
	"net/http"
)

func main() {
	r:=render.NewRender()
	r.GzipAll().DeflateAll().Charset("utf-8")
	m := mux.New()
	m.HandleFunc("/compress", func(w http.ResponseWriter, req *http.Request) {
		r.Body(w,req,[]byte("compress"),http.StatusOK)
	}).GET().POST().HEAD()
	log.Fatal(http.ListenAndServe(":8080", m))
}

curl -H "Accept-Encoding: gzip" --compressed http://localhost:8080/compress

compress

curl -H "Accept-Encoding: gzip" -I --compressed http://localhost:8080/compress

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/plain; charset=utf-8
Vary: Accept-Encoding
Date: Sun, 06 Oct 2019 12:50:34 GMT
Content-Length: 37

curl -H "Accept-Encoding: deflate" --compressed http://localhost:8080/compress

compress

curl -H "Accept-Encoding: deflate" -I --compressed http://localhost:8080/compress

HTTP/1.1 200 OK
Content-Encoding: deflate
Content-Type: text/plain; charset=utf-8
Vary: Accept-Encoding
Date: Sun, 06 Oct 2019 12:51:23 GMT
Content-Length: 25
Simple Example
package main

import (
	"github.com/hslam/handler/render"
	"github.com/hslam/mux"
	"log"
	"net/http"
)

type Student struct {
	Name    string
	Age     int32
	Address string
}

func main() {
	r := render.NewRender()
	r.GzipAll().DeflateAll().Charset("utf-8")
	m := mux.New()
	m.HandleFunc("/text", func(w http.ResponseWriter, req *http.Request) {
		r.Text(w, req, "Hello world", http.StatusOK)
	}).All()
	m.HandleFunc("/raw", func(w http.ResponseWriter, req *http.Request) {
		r.Body(w, req, []byte("raw data"), http.StatusOK)
	}).All()
	m.HandleFunc("/json", func(w http.ResponseWriter, req *http.Request) {
		r.JSON(w, req, Student{"Mort Huang", 18, "Earth"}, http.StatusOK)
	}).All()
	m.HandleFunc("/xml", func(w http.ResponseWriter, req *http.Request) {
		r.XML(w, req, Student{"Mort Huang", 18, "Earth"}, http.StatusOK)
	}).All()
	log.Fatal(http.ListenAndServe(":8080", m))
}

curl -H "Accept-Encoding: gzip,deflate" --compressed http://localhost:8080/raw

raw data

curl -H "Accept-Encoding: gzip,deflate" --compressed http://localhost:8080/json?pretty=y

{
  "Name": "Meng Huang",
  "Age": 18,
  "Address": "Earth"
}

curl -H "Accept-Encoding: gzip,deflate" --compressed http://localhost:8080/xml?pretty=y

<Student>
  <Name>Meng Huang</Name>
  <Age>18</Age>
  <Address>Earth</Address>
</Student>
Template Example
package main

import (
	"fmt"
	"github.com/hslam/handler/render"
	"github.com/hslam/mux"
	"log"
	"net/http"
)

type Student struct {
	Name    string
	Age     int32
	Address string
}

var studentTemplate = `
This is a Student Template:
Name: {{.Name}};
Age:{{.Age}};
Address: {{.Address}}.
`

var studentTemplateOne = `
<br>Name	-	{{.Name}}<br/>
<br>Age		-	{{.Age}}<br/>
<br>Address	-	{{.Address}}<br/>
`

var studentTemplateTwo = `
<html><body>
<table style='width:100%'>
	<tr><td align='center'>Name</td><td align='center'>{{.Name}}</td><tr>
	<tr><td align='center'>Age</td><td align='center'>{{.Age}}</td><tr>
	<tr><td align='center'>Address</td><td align='center'>{{.Address}}</td><tr>
</table>
</body></html>
`

func main() {
	r := render.NewRender()
	r.Parse(studentTemplate)
	r.ParseTemplate("1", studentTemplateOne)
	r.ParseTemplate("2", studentTemplateTwo)
	r.GzipAll().DeflateAll().Charset("utf-8")
	m := mux.New()
	m.HandleFunc("/template", func(w http.ResponseWriter, req *http.Request) {
		r.Execute(w, req, Student{"Mort Huang", 18, "Earth"}, http.StatusOK)
	}).All()
	m.HandleFunc("/template/:name", func(w http.ResponseWriter, req *http.Request) {
		params := m.Params(req)
		_, err := r.ExecuteTemplate(w, req, params["name"], Student{"Mort Huang", 18, "Earth"}, http.StatusOK)
		if err != nil {
			r.Text(w, req, fmt.Sprintf("template/%s is not exsited", params["name"]), http.StatusOK)
		}
	}).All()
	log.Fatal(http.ListenAndServe(":8080", m))
}

curl -H "Accept-Encoding: gzip,deflate" --compressed http://localhost:8080/template

This is a Student Template:
Name: Meng Huang;
Age:18;
Address: Earth.

curl -H "Accept-Encoding: gzip,deflate" --compressed http://localhost:8080/template/1

<br>Name	-	Meng Huang<br/>
<br>Age		-	18<br/>
<br>Address	-	Earth<br/>

curl -H "Accept-Encoding: gzip,deflate" --compressed http://localhost:8080/template/2

<html><body>
<table style='width:100%'>
	<tr><td align='center'>Name</td><td align='center'>Meng Huang</td><tr>
	<tr><td align='center'>Age</td><td align='center'>18</td><tr>
	<tr><td align='center'>Address</td><td align='center'>Earth</td><tr>
</table>
</body></html>
License

This package is licensed under a MIT license (Copyright (c) 2019 Meng Huang)

Author

render was written by Meng Huang.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Body

func Body(w http.ResponseWriter, r *http.Request, body []byte, code int) (int, error)

func Execute

func Execute(w http.ResponseWriter, r *http.Request, text string, data interface{}, code int) (int, error)

func File

func File(w http.ResponseWriter, r *http.Request, name string, code int) (int, error)

func JSON

func JSON(w http.ResponseWriter, r *http.Request, v interface{}, code int) (int, error)

func Redirect

func Redirect(w http.ResponseWriter, r *http.Request, url string)

func ServeFile

func ServeFile(w http.ResponseWriter, r *http.Request, name string)

func Text

func Text(w http.ResponseWriter, r *http.Request, text string, code int) (int, error)

func XML

func XML(w http.ResponseWriter, r *http.Request, v interface{}, code int) (int, error)

Types

type Render

type Render struct {
	// contains filtered or unexported fields
}
var DefalutRender *Render

func NewRender

func NewRender() *Render

func (*Render) Body

func (render *Render) Body(w http.ResponseWriter, r *http.Request, body []byte, code int) (int, error)

func (*Render) Charset

func (render *Render) Charset(charset string) *Render

func (*Render) DeflateAll

func (render *Render) DeflateAll() *Render

func (*Render) Execute

func (render *Render) Execute(w http.ResponseWriter, r *http.Request, data interface{}, code int) (int, error)

func (*Render) ExecuteTemplate

func (render *Render) ExecuteTemplate(w http.ResponseWriter, r *http.Request, name string, data interface{}, code int) (int, error)

func (*Render) File

func (render *Render) File(w http.ResponseWriter, r *http.Request, name string, code int) (int, error)

func (*Render) GzipAll

func (render *Render) GzipAll() *Render

func (*Render) JSON

func (render *Render) JSON(w http.ResponseWriter, r *http.Request, v interface{}, code int) (int, error)

func (*Render) Parse

func (render *Render) Parse(text string) error

func (*Render) ParseTemplate

func (render *Render) ParseTemplate(name, text string) error

func (*Render) Redirect

func (render *Render) Redirect(w http.ResponseWriter, r *http.Request, url string)

func (*Render) ServeFile

func (render *Render) ServeFile(w http.ResponseWriter, r *http.Request, name string)

func (*Render) Text

func (render *Render) Text(w http.ResponseWriter, r *http.Request, text string, code int) (int, error)

func (*Render) XML

func (render *Render) XML(w http.ResponseWriter, r *http.Request, v interface{}, code int) (int, error)

type Tmpl

type Tmpl struct {
	// contains filtered or unexported fields
}

func NewTmpl

func NewTmpl() *Tmpl

func NewTmplWithRender

func NewTmplWithRender(render *Render) *Tmpl

func (*Tmpl) Execute

func (t *Tmpl) Execute(w http.ResponseWriter, r *http.Request, data interface{}, code int) (int, error)

func (*Tmpl) ExecuteTemplate

func (t *Tmpl) ExecuteTemplate(w http.ResponseWriter, r *http.Request, name string, data interface{}, code int) (int, error)

func (*Tmpl) Parse

func (t *Tmpl) Parse(text string) error

func (*Tmpl) ParseFiles

func (t *Tmpl) ParseFiles(filenames ...string) error

func (*Tmpl) ParseTemplate

func (t *Tmpl) ParseTemplate(name, text string) error

Directories

Path Synopsis
examples
all

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL