当前位置: 首页 > article >正文

golang web笔记-3.响应ResponseWriter

简介        

        从服务器向客户端返回响应需要使用 ResponseWriter,ResponseWriter是一个接口,handler用它来返回响应。

ResponseWriter常用方法

  1. Write:接收一个byte切片作为参数,然后把它写入到响应的body中。如果Write被调用时,header里边没有设定content type,那么数据的前512个字节就会被用来监测content type。

  2. Header:返回headers的map,可以进行修改,修改后的headers将会体现在返回给客户段的http响应里。
  3. WriteHeader: 方法接收一个整数类型作为参数,并把它设置为Http响应的状态吗,如果状态码没有被显示调用,默认WriteHeader(http.StatusOK);WriteHeader主要用来设置错误码。WriteHeader设置后Header将不能再被修改。
    package main
    
    import (
    	"fmt"
    	"net/http"
    )
    
    func main() {
    	server := http.Server{
    		Addr: "localhost:8080",
    	}
    	http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {
    		html := "<html><head><title>测试response</title></head><body><h1>Hello World!</h1></body></html>"
    		writer.Header().Set("Location", "http:localhost:8080")
    		writer.WriteHeader(302) //WriteHeader设置后Header将不能再被修改。修改header需要在设置WriteHeader之前
    		fmt.Fprintln(writer, "测试错误返回501")
    		writer.Write([]byte(html))
    	})
    	server.ListenAndServe()
    }

ResponseWriter返回json

创建json对应的struct

  1. 创建struct对应的实例
  2. 响应header的Content-Type需设置为appliation/json
  3. 使用json.Marshal将struct的实例转换为json
  4. 使用Write方法返回json
package main

import (
	"encoding/json"
	"net/http"
)

type Post struct {
	User    string
	Threads []string
}

func main() {
	server := http.Server{
		Addr: "localhost:8080",
	}
	http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {
		writer.Header().Set("Content-Type", "appliation/json")
		post := &Post{
			User:    "Xiaoqiang",
			Threads: []string{"first", "second", "third"},
		}
		jsonStr, _ := json.Marshal(post)
		writer.Write(jsonStr)

	})
	server.ListenAndServe()
}

内置响应

NotFound函数:返回404状态码和一个额外的信息

ServeFile函数:从文件系统提供文件返回给请求者

ServeContent函数:实现了io.ReadSeeker接口的任何东西里面的内容返回给请求者

Redirect函数:告诉客户段重定向到另外一个URl


http://www.kler.cn/a/325739.html

相关文章:

  • 讯飞、阿里云、腾讯云:Android 语音合成服务对比选择
  • urdf笔记
  • 前后端交互之动态列
  • STM32串口——5个串口的使用方法
  • tcp 超时计时器
  • 【学习笔记】科学计算
  • 万界星空科技数字孪生:解锁制造业未来,重塑智慧工厂新纪元
  • 从0学习React(4)---更新组件状态setState
  • gradle的入门及kotlin的了解
  • 开箱元宇宙| 探索 Great Entertainment Group 如何利用 Web3 和数字创新重新定义活动体验
  • 【Android】多角度看handler--looper的阻塞
  • 产品管理- 互联网产品(6):产品测试
  • CSS预处理器LESS
  • 工厂模式和抽象工厂模式的实验报告
  • Could not find com.mapbox.mapboxsdk:mapbox-android-accounts:0.7.0.解决
  • 禾赛嵌入式面试题及参考答案(2万字长文)
  • 升级 Windows 后如何恢复丢失的文件
  • 51单片机的教室智能照明系统【proteus仿真+程序+报告+原理图+演示视频】
  • centos7.9使用docker容器方式部署jenkins环境
  • 深度学习中的结构化概率模型 - 非结构化建模的挑战篇
  • QT 开发日志:QT 布局管理 —— 如何使用布局器组织 UI 元素
  • bash 脚本获取当前 git 所有本地分支
  • (undone) MIT6.824 Lab1
  • Python库matplotlib之三
  • 论Web性能的重要性
  • 代理的网速与服务器进出口有关吗