Go之路(二十八):Http编程

Http编程

go里面的http模块都是已经封装好的,在net/http里面

几行代码实现web服务:

package main

import(
	"fmt"
	"net/http"
)

func Hello(w http.ResponseWriter, request *http.Request){
	fmt.Println("???") // 后台打印
	fmt.Fprintf(w, "hello2") //前端打印
}


func Login(w http.ResponseWriter, request *http.Request){
	// fmt.Println("hello") // 后台打印
	fmt.Fprintf(w, "123123") //前端打印

}



func main()  {
	http.HandleFunc("/", Hello)
	http.HandleFunc("/login/", Login)
	err := http.ListenAndServe("0.0.0.0:8000", nil)
	if err != nil{
		fmt.Println(err)
	}
}

  另外,如果panic需要捕获,当项目规模比较大的时候,不能在每个函数前面都写一个捕获panic的功能,所以需要重新封装一个函数

package main

import(
	"fmt"
	"log"
	"net/http"
)

func Hello(w http.ResponseWriter, request *http.Request){
	fmt.Println("???") // 后台打印
	fmt.Fprintf(w, "hello2") //前端打印
}


func Login(w http.ResponseWriter, request *http.Request){
	// fmt.Println("hello") // 后台打印
	fmt.Fprintf(w, "123123") //前端打印

}

func logPanic(handler http.HandlerFunc) http.HandlerFunc{
	return func(w http.ResponseWriter, request *http.Request){
		defer func(){
			if err:=recover();err != nil{
				log.Printf("%v panic: %v", request.RemoteAddr,err)
			}
		}()
		handler(w,request)
	}
} 



func main()  {
	http.HandleFunc("/", logPanic(Hello))
	http.HandleFunc("/login/", logPanic(Login))
	err := http.ListenAndServe("0.0.0.0:8000", nil)
	if err != nil{
		fmt.Println(err)
	}
}

  渲染模板:使用text/template,ParseFiles方法

package main

import(
	"fmt"
	"log"
	"net/http"
	"text/template"
)

type Person struct{
	Name string
	Age int
}

func Hello(w http.ResponseWriter, request *http.Request){
	tem,err:= template.ParseFiles("C:/Users/邓磊/Desktop/go/src/day11/http/index.html")
	if err != nil{
		fmt.Println(err)
	}
	p1 := Person{
		Name:"tom",
		Age:13,
	}
	if err:= tem.Execute(w, p1);err !=nil{
		fmt.Println(err)
	}

}


func Login(w http.ResponseWriter, request *http.Request){
	// fmt.Println("hello") // 后台打印
	fmt.Fprintf(w, "123123") //前端打印

}

func logPanic(handler http.HandlerFunc) http.HandlerFunc{
	return func(w http.ResponseWriter, request *http.Request){
		defer func(){
			if err:=recover();err != nil{
				log.Printf("%v panic: %v", request.RemoteAddr,err)
			}
		}()
		handler(w,request)
	}
} 



func main()  {
	http.HandleFunc("/", logPanic(Hello))
	http.HandleFunc("/login/", logPanic(Login))
	err := http.ListenAndServe("0.0.0.0:8000", nil)
	if err != nil{
		fmt.Println(err)
	}
}

  模板语法---if:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>hello </p>
    <p>{{.}}</p>
    <p>{{.Name}}</p>
    {{if gt .Age 18}}
        <p>成年人{{.Age}}</p>
    {{else}}
        <p>未成年人{{.Age}}</p>
    {{end}}
</body>
</html>

  

 

posted @ 2018-12-09 18:42  __Miracle  阅读(127)  评论(0编辑  收藏  举报