Go语言http表单解析及log测试(VSCode for mac)

Go语言http表单解析及log测试(VSCode for mac)

1 、main函数的代码如下,主要做了设置LOG位置并启动监听一个端口⬇️
package main

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

func main() {

	//初始化先指定一个LOG文件的位置
	logPath := "/Users/xuanwenchao/Documents/vscode_code/log.txt"
	fd, err := os.OpenFile(logPath, os.O_RDWR|os.O_CREATE, 0777)
	if err == nil {
		//如果LOG文件打开成功,则将其设定为系统log的文件
		log.SetOutput(fd)
		http.HandleFunc("/", handler_func)
		log.Fatal(http.ListenAndServe("localhost:8000", nil))

	} else {
		fmt.Printf("Create Log file failer!!! %v", err)
	}
}

2、为了在浏览器和日志文件中都可以显示log信息,下面我们将输出封装一个封法⬇️
func showAndRecordLog(w io.Writer, format string, a ...interface{}) (n int, err error) {
	log.Printf(format, a...)
	n, err = fmt.Fprintf(w, format, a...)
	return
}

3、下面为http服务收到请求后的响应回调函数⬇️
func handler_func(w http.ResponseWriter, r *http.Request) {

	showAndRecordLog(w, "%s %s %s \n", r.Method, r.URL, r.Proto)
	for k, v := range r.Header {
		showAndRecordLog(w, "Header[%q]=%q\n", k, v)
	}
	showAndRecordLog(w, "Host=%q\n", r.Host)
	showAndRecordLog(w, "RemoteAddr = %q\n", r.RemoteAddr)
	if err := r.ParseForm(); err != nil {
		showAndRecordLog(w, "ParseForm ERROR:%v", err)
	}
	for k, v := range r.Form {
		showAndRecordLog(w, "Form[%q] = %q\n", k, v)
	}
}

4 、接下来我们在VSCODE中编译启动我们的服务,下面是输出信息,表示已经启动⬇️
[Running] go run "/Users/xuanwenchao/Documents/vscode_code/k.go"

5 、这时我们使用浏览器访问一下服务是否可以正常使用⬇️

Go语言http表单解析及log测试(VSCode for mac)

经验证服务器可以正常响应,浏览器中的信息就是我们输出的


6 、为了测试对form表单的解析,我们需要用postman模拟一个post请求⬇️

Go语言http表单解析及log测试(VSCode for mac)

Go语言http表单解析及log测试(VSCode for mac)

分别对http请求的headers和body进行了测试值的输入,send后产生了如下的结果:
Go语言http表单解析及log测试(VSCode for mac)

通过返回的结果可以看到,对头部和表单体的解都是正常的。


7 、最后我们再验证一下log文件中的内容是否正确⬇️

Go语言http表单解析及log测试(VSCode for mac)


8 、接下来我想说,我不知道?如何非调式模式下退出启动的服务,于是我做了如下很LOW的方式,哪位大神知道可以告诉我一下⬇️

Go语言http表单解析及log测试(VSCode for mac)