golang web笔记-3.响应ResponseWriter

news/2024/9/30 8:21:39 标签: golang, 笔记, 开发语言

简介        

        从服务器向客户端返回响应需要使用 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.niftyadmin.cn/n/5684709.html

相关文章

手机USB连接不显示内部设备,设备管理器显示“MTP”感叹号,解决方案

进入小米驱动下载界面&#xff0c;等小米驱动下载完成后&#xff0c;解压此驱动文件压缩包。 5、小米USB驱动安装方法&#xff1a;右击“计算机”&#xff0c;从弹出的右键菜单中选择“管理”项进入。 6、在打开的“计算机管理”界面中&#xff0c;展开“设备管理器”项&…

[Linux]:线程(二)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 与Windows环境不同&#xff0c;我们在linux环境下需要通过指令进行各操作&…

【Python】使用 Pydantic + SQLAlchemy + MySQL 实现自动记录创建时间和更新时间

使用 Pydantic SQLAlchemy MySQL 实现自动记录创建时间和更新时间 在 Web 应用开发中&#xff0c;自动记录数据库中的 创建时间 和 更新时间 是常见的需求。无论是日志记录、数据跟踪&#xff0c;还是审计功能&#xff0c;这类时间戳都至关重要。本文将介绍如何结合 SQLAlch…

【有啥问啥】In-Context Learning(上下文学习):深入解析与应用实践

In-Context Learning&#xff08;上下文学习&#xff09;&#xff1a;深入解析与应用实践 引言 在人工智能与机器学习的浪潮中&#xff0c;In-Context Learning&#xff08;上下文学习&#xff09;作为一种新兴的学习范式&#xff0c;正逐渐崭露头角。与传统的机器学习模型不…

07_矩形圆形绘制

import cv2 import numpy as np newImageInfo (600,600,3) dst np.zeros(newImageInfo,np.uint8) # 1 2 左上角 3 右下角 4 5 fill -1 >0 line w cv2.rectangle(dst,(150,380),(350,550),(150,200,100),3) # 2 center 3 r cv2.circle(dst,(250,250),(100),(0,0,255),6) …

1.8 软件业务测试

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 概述2 方法3 测试策略4 案例分析 前言 在软件开发生命周期中&#xff0c;业务测试扮演着至关重要的角色。本文详细讲解了业务测试的定义、目的、方法以及测试策略。 本篇文章参…

macOS 开发环境配置与应用开发

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

WingetUI:可视化Windows常用的命令行包管理工具

推荐一个Windows工具&#xff0c;可以轻松地下载、安装、更新和卸载任何在支持的包管理器上发布的软件。 01 项目简介 WinGetUI 是一个基于 .NET 的开源项目&#xff0c;它旨在提供一个图形用户界面&#xff08;GUI&#xff09;来管理包&#xff0c;支持命令比如 Winget、Sco…