Skip to content
/ mux Public

Package mux implements an HTTP request multiplexer.

License

Notifications You must be signed in to change notification settings

hslam/mux

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mux

PkgGoDev Build Status codecov Go Report Card LICENSE

Package mux implements an HTTP request multiplexer.

Features

  • Middleware
  • Group
  • Path matching and routing
  • Fully compatible with the http.HandlerFunc
  • Not found
  • Recovery
  • HTTP Handler

Get started

Install

go get github.com/hslam/mux

Import

import "github.com/hslam/mux"

Usage

Simple Example

package main

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

func main() {
	m := mux.New()
	m.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Hello World"))
	})
	log.Fatal(http.ListenAndServe(":8080", m))
}

Example

package main

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

func main() {
	m := mux.New()
	m.Recovery(mux.Recovery)
	m.NotFound(func(w http.ResponseWriter, r *http.Request) {
		http.Error(w, "Not Found : "+r.URL.String(), http.StatusNotFound)
	})
	m.Use(func(w http.ResponseWriter, r *http.Request) {
		fmt.Printf("Host:%s Path:%s Method:%s\n", r.Host, r.URL.Path, r.Method)
	})
	m.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte(fmt.Sprintf("hello world Method:%s\n", r.Method)))
	}).All()
	m.HandleFunc("/hello/:key/world/:value", func(w http.ResponseWriter, r *http.Request) {
		params := m.Params(r)
		w.Write([]byte(fmt.Sprintf("hello key:%s value:%s\n", params["key"], params["value"])))
	}).GET().POST().PUT().DELETE()
	m.Group("/group", func(m *mux.Mux) {
		m.HandleFunc("/foo/:id", func(w http.ResponseWriter, r *http.Request) {
			params := m.Params(r)
			w.Write([]byte(fmt.Sprintf("group/foo id:%s\n", params["id"])))
		}).GET()
		m.HandleFunc("/bar/:id", func(w http.ResponseWriter, r *http.Request) {
			params := m.Params(r)
			w.Write([]byte(fmt.Sprintf("group/bar id:%s\n", params["id"])))
		}).GET()
	})
	log.Fatal(http.ListenAndServe(":8080", m))
}

curl -XGET http://localhost:8080/favicon.ico

Not Found : /favicon.ico

curl -XGET http://localhost:8080/hello

hello world Method:GET

curl -XPOST http://localhost:8080/hello

hello world Method:POST

curl -I http://localhost:8080/hello

HTTP/1.1 200 OK
Date: Tue, 01 Oct 2019 20:28:42 GMT
Content-Length: 24
Content-Type: text/plain; charset=utf-8

curl -XPATCH http://localhost:8080/hello

hello world Method:PATCH

curl -XOPTIONS http://localhost:8080/hello

hello world Method:OPTIONS

curl http://localhost:8080/hello/123/world/456

hello key:123 value:456

curl http://localhost:8080/group/foo/1

group/foo id:1

curl http://localhost:8080/group/bar/2

group/bar id:2

License

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

Author

mux was written by Meng Huang.