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

淘宝内部领优惠券的网站怎么建设个人求职网站如何做

淘宝内部领优惠券的网站怎么建设,个人求职网站如何做,企业网站开发哪家专业,长沙抖音seo公司地址Go语言实现SSE中转demo 文章概要:本文主要通过一个demo来介绍如何使用Go语言实现SSE中转。 本文内容来自:谷流仓AI - ai.guliucang.com 前提 已安装Go语言环境(参考这篇文章:Macbook安装Go以及镜像设置) 创建项目 创建项目目录…

Go语言实现SSE中转demo

文章概要:本文主要通过一个demo来介绍如何使用Go语言实现SSE中转。

本文内容来自:谷流仓AI - ai.guliucang.com

前提

  • 已安装Go语言环境(参考这篇文章:Macbook安装Go以及镜像设置)

创建项目

  1. 创建项目目录
mkdir go-app && cd go-app
  1. 初始化项目
# 后面的模块名自己定义
go mod init example/user/go-app

创建文件

先看一下完成之后的目录结构:

go-app/
├─ go.mod
├─ http/
│  ├─ requests.go
│  └─ responses.go
└─ main.go

然后每个文件的代码如下:

  1. main.go
package mainimport ("example/user/go-app/http""github.com/gin-gonic/gin""log"
)// 主函数:初始化并启动 Gin 框架的 HTTP 服务器,支持 /event-stream 的 POST 和 GET 请求。
func main() {// 创建一个用于传递事件的通道ch := make(chan string)// 初始化并配置默认的 Gin路由器router := gin.Default()// 设置 POST /event-stream 的处理函数,用于处理 POST 请求router.POST("/event-stream", func(c *gin.Context) {http.HandleEventStreamPost(c, ch) // 处理 POST 请求的逻辑})// 设置 GET /event-stream 的处理函数,用于处理 GET 请求router.GET("/event-stream", func(c *gin.Context) {http.HandleEventStreamGet(c, ch) // 处理 GET 请求的逻辑})// 启动 HTTP 服务器并监听端口 9990,记录启动失败的错误日志log.Fatalf("error running HTTP server: %s\n", router.Run(":9990"))
}
  1. 创建http目录,并创建文件
  • requests.go
package httpimport ("errors""fmt""github.com/gin-gonic/gin""io"
)// EventStreamRequest 结构体定义了事件流请求的数据模型
type EventStreamRequest struct {Message string `form:"message" json:"message" binding:"required,max=100"` // 请求中必须提供的消息内容,最大长度为100
}// HandleEventStreamPost 处理POST方法的事件流请求
// c: Gin框架的上下文对象,用于处理HTTP请求和响应
// ch: 用于事件流通信的通道,将请求消息发送到此通道
func HandleEventStreamPost(c *gin.Context, ch chan string) {var request EventStreamRequest// 尝试绑定请求数据到EventStreamRequest结构体if err := c.ShouldBind(&request); err != nil {// 如果绑定失败,生成错误响应并返回errorMessage := fmt.Sprintf("request validation error: %s", err.Error())BadRequestResponse(c, errors.New(errorMessage))return}// 将请求消息发送到通道ch <- request.Message// 创建成功响应并返回CreatedResponse(c, &request.Message)return
}// HandleEventStreamGet 处理获取事件流的请求。
// c: Gin框架的上下文对象,用于处理HTTP请求和响应。
// ch: 一个字符串类型的通道,用于向客户端发送事件消息。
func HandleEventStreamGet(c *gin.Context, ch chan string) {// 使用Stream方法来建立一个服务器端事件流,不断检查通道中是否有新消息。c.Stream(func(w io.Writer) bool {// 如果通道中有消息,通过SSEvent方法以"message"事件类型发送到客户端。if msg, ok := <-ch; ok {c.SSEvent("message", msg)return true // 表示继续发送下一个事件}return false // 表示没有更多事件,结束流})return
}
  • reponses.go
package httpimport ("github.com/gin-gonic/gin""net/http"
)// JSendFailResponse 定义了一个失败响应的结构体,包含状态和数据字段
type JSendFailResponse[T any] struct {Status string `json:"status"` // 响应状态Data   T      `json:"data"`   // 响应数据,这里泛型T可以是任意类型
}// JSendSuccessResponse 定义了一个成功响应的结构体,包含状态和可选的数据字段
type JSendSuccessResponse[T any] struct {Status string `json:"status"`         // 响应状态Data   T      `json:"data,omitempty"` // 响应数据,成功时可选
}// BadRequestResponse 用于处理Bad Request错误,返回400状态码和错误信息
func BadRequestResponse(c *gin.Context, error error) {c.JSON(http.StatusBadRequest,JSendFailResponse[string]{Status: "fail",        // 设置响应状态为失败Data:   error.Error(), // 将错误信息填入数据字段},)return
}// CreatedResponse 用于处理创建资源的成功响应,返回201状态码和创建的资源信息
func CreatedResponse[T interface{}](c *gin.Context, i *T) {c.JSON(http.StatusCreated,JSendSuccessResponse[T]{Status: "success", // 设置响应状态为成功Data:   *i,        // 填入创建的资源信息},)return
}

运行程序

  1. 启动项目
go run main.go
  1. 开一个终端,运行以下命令, 监听数据:
curl http://localhost:9990/event-stream
  1. 打开另一个终端,运行以下命令,发送数据:
curl -d '{"message":"Hello, Event Stream!"}' -H "Content-Type: application/json" -X POST http://localhost:9990/event-stream
  1. 观察第一个终端,可以看到数据已经发送过来了:
event:message
data:Hello, Event Stream!

文章转载自:

http://GQ75u8Aq.xfxLr.cn
http://PR3Q0Bk3.xfxLr.cn
http://huKBcRez.xfxLr.cn
http://xCL7VDbE.xfxLr.cn
http://8oWmCLu8.xfxLr.cn
http://h2oOmV8d.xfxLr.cn
http://GgLSmPGl.xfxLr.cn
http://HtwF4MLm.xfxLr.cn
http://LwNJOodR.xfxLr.cn
http://rGRqXvi4.xfxLr.cn
http://qgGB3PBc.xfxLr.cn
http://MGPtE0PZ.xfxLr.cn
http://RAsojoTc.xfxLr.cn
http://Hng04B1z.xfxLr.cn
http://JriPDxZi.xfxLr.cn
http://pPiYNfsQ.xfxLr.cn
http://X5suIYeT.xfxLr.cn
http://tP3LwCSo.xfxLr.cn
http://v52eoNYQ.xfxLr.cn
http://ddJn006U.xfxLr.cn
http://SAVbt5Pf.xfxLr.cn
http://Zkq6YCL5.xfxLr.cn
http://Vd6bPbxi.xfxLr.cn
http://0Warn6SP.xfxLr.cn
http://n8LYGvJ7.xfxLr.cn
http://FRtGHSyY.xfxLr.cn
http://kfkbNDdF.xfxLr.cn
http://43Gv45KU.xfxLr.cn
http://nHJuXDWC.xfxLr.cn
http://sv5Eftpo.xfxLr.cn
http://www.dtcms.com/wzjs/637192.html

相关文章:

  • 修改WordPress网站网站后台管理系统哪个好
  • 长沙房地产开发商排名高端seo服务
  • pc网站手机版开发百度下载官方下载安装
  • 个人做网站郊游的英php网站服务器架设
  • 有没专门做二手的家具网站沈阳定制网站开发公司
  • 昆明做网站的公司有哪些合肥平台网站建设
  • 四川省住房城乡建设厅网站首页网站开发技术要学什么软件
  • 做网站还是移动开发上海百度公司总部地址
  • 专业网站建设是哪家好怎么查看一个网站的建设地区
  • 网站开发的理解东莞哪里建设网站好
  • 玉泉路网站建设动漫制作技术专业介绍
  • 网站 抄袭网络推广运营优化
  • 制作表白网站的软件北京首华建设经营有限公司网站
  • 做单页网站怎么选产品wordpress 出错
  • 东莞网站建设工作android应用开发期末考试题
  • 网站推广做哪个比较好合肥网页设计公司
  • 邢台网站建设电话重庆网站建设在哪里
  • 网站模仿算侵权吗国内公司网站需要备案
  • 安庆市建设银行网站网站建设销售技巧
  • 腐女做喜欢的网站做酒网站
  • 宁波 住房和建设局网站首页怎么打开自己做的网站
  • 网站产品原型图海外网络专线
  • 企业网站营销的优缺点沈阳网 沈阳网站
  • 个人网站icp备案网站漂浮物怎么做
  • 锦州网站建设工作找家里做的工作到什么网站
  • 阿里云esc建设网站免费网站安全软件大全游戏
  • 软件开发工具与平台温州seo服务
  • 如何制作自己的个人网站网站建设电话销售话术
  • 苏州企业网站建设方案wordpress 多站点 多域名
  • 网站建设教程这篇苏州久远网络做U启的网站