golang web笔记-3.响应ResponseWriter

ops/2024/10/19 1:57:38/

简介        

        从服务器向客户端返回响应需要使用 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 mainimport ("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 mainimport ("encoding/json""net/http"
)type Post struct {User    stringThreads []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.ppmy.cn/ops/121973.html

相关文章

大厂出来的人为什么不比你高效?

在最近参加的一个线下聚会上&#xff0c;有人问我&#xff1a;“我们单位有来自阿里、腾讯、华为这些大厂的人&#xff0c;为什么我没觉得他们做事比我们这些没大厂经历的人更有章法和效率&#xff1f;”你别说&#xff0c;这一问所反映的现象&#xff0c;与我在阿里巴巴工作时…

【从0开始搭建微服务并进行部署】SpringBoot+dubbo+zookeeper

文章目录 说明环境搭建创建项目父模块设置子模块 dubbo-api子模块 dubbo-provider子模块 dubbo-consumer测试项目 docker部署项目完整项目地址 说明 jdk1.8SpringBoot2.x低版本dubbo&#xff1a;请查看之前教程【微服务】SpringBootDubboZooKeeper 实战 关于本教程将采用jdk1…

19.3 打镜像部署到k8s中,prometheus配置采集并在grafana看图

本节重点介绍 : 打镜像&#xff0c;导出镜像&#xff0c;传输到各个节点并导入运行该项目配置prometheus和grafana 打镜像 本地build docker build -t ink8s-pod-metrics:v1 .build过程 导出镜像 docker save ink8s-pod-metrics > ink8s-pod-metrics.tar 传输到各个node…

10.2今日错题解析(软考)

目录 前言面向对象技术——设计模式的应用场景系统开发基础——概要设计与详细设计 前言 这是用来记录我备考软考设计师的错题的&#xff0c;今天知识点为设计模式的应用场景、概要设计与详细设计&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xf…

HarmonyOS/OpenHarmony 自定义弹窗页面级层级控制解决方案

关键词&#xff1a;CuntomDialog自定义弹窗、SubWindow子窗口、页面级、弹窗层级控制、鸿蒙、弹窗展示层级异常 问题存在API版本&#xff1a;API10 - API12&#xff08;该问题已反馈&#xff0c;期望后续官方能增加页面级控制能力&#xff09; 在正常的鸿蒙app开发过程中&…

Cyber Weekly #27

赛博新闻 1、ChatGPT迎来交互界面大改 10月4日凌晨&#xff0c;ChatGPT推出了Canvas功能&#xff0c;这是一个全新的交互界面&#xff0c;允许用户在写作和编码方面与ChatGPT进行更紧密的协作。Canvas被设计为一个更大的协作空间&#xff0c;能够随着用户的偏好不断演变&…

计数排序(counting sort)

计算排序是一种通过计算每个元素出现的次数来进行排序的算法。它不比较元素&#xff0c;而是利用数组来“计数”&#xff0c;所以在某些情况下&#xff0c;它能比传统的比较排序快。 计数排序首先要找到要排序数组的最大值&#xff0c;然后创建一个统计数组存储每个排序元素的…

rk3566开发之rknn npu 部署

目录 NPU使用 RKNN 模型 非 RKNN 模型 RKNN-Toolkit2工具 RKNN NPU 测试代码如下 main.cc ssd.cc 调用 ssd模型进行目标检测测试 ssd.h qt 中调用 rknn npu 接口 NPU使用 RK3566 内置 NPU 模块。使用该NPU需要下载RKNN SDK,RKNN SDK 为带有 NPU 的 RK3566/RK3568 芯片…