包含标签 gin 中的文章

如何实现 Http Request Body 多次读取

如何实现 Http Request Body 多次读取 建议点击 查看原文 查看最新内容。 原文链接: https://typonotes.com/posts/2024/01/02/http-request-multiple-times-read/ 最近在使用 gin 的时候, 踩了一个重复读取的 Request.Body 的坑。 起因是 gin 的 gin.Context{} 提供了 c.Copy() 方法创建副本。 这个方法一直在用, 但不知道从什么时候开始, 一直认为这个方法是 深拷贝, 但 并不完全是 (T_T) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 // Copy returns a……

阅读全文

OpenTelemetry(1): Golang 接入 OpenTelemetry 完整过程和思路(附源码)- Gin Demo

Golang 接入 OpenTelemetry 完整过程和思路(附源码) - Gin Demo 建议点击 查看原文 查看最新内容。 原文链接: https://typonotes.com/posts/2023/08/14/golang-opentelemetry-notes/ 为了更方便的查看代码, 建议直接跳转到 Github 仓库: https://github.com/tangx/opentelemetry-gin-demo 使用笔记 1. 使用 Otel-Collect-Contrib 初始化 trace.Provider 这里使用 app -> collector-contrib 进行转发, 应用不直接对后端的存储。 适配性 更高。 collector-contrib 最常见的两种协议 grpc / http(s)。 传入 endpoint 地址进行初始化 Provid……

阅读全文

开发 k8s 管理平台 - k8sailor 04. 使用 gin 创建第一个 API 接口

开发 k8s 管理平台 - k8sailor 04. 使用 gin 创建第一个 API 接口 原文地址: https://tangx.in/posts/books/k8sailor/chapter01/04-init-httpserver/ tag: https://github.com/tangx/k8sailor/tree/feat/04-httpserver-initial 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 cd cmd/k8sailor && go run . httpserver 启动 web 服务器 Usage: k8sailor httpserver [flags] Flags: -h, --help help for httpserver Global Flags: --config string k8s 配置授权文件 (default "./k8sconfig/config.yml") 2021/09/24 07:56:51 open config/local.yml: no such file or directory [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached. [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] GET /k8sailor/v0/ping --> github.com/tangx/k8sailor/cmd/k8sailor/apis.RootGroup.func1 (3 handlers) [GIN-debug] Listening……

阅读全文

开发 k8s 管理平台 - k8sailor 05. RESTFul API 接口规范与请求应答约定

开发 k8s 管理平台 - k8sailor 05. RESTFul API 接口规范与请求应答约定 原文地址: https://tangx.in/posts/books/k8sailor/chapter01/05-design-restful-api-and-response-data/ tag: https://github.com/tangx/k8sailor/tree/feat/05-design-restful-api-and-response-data 强烈建议使用 RESTful 风格来设计 API 文档。 RESTful api 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # kubectl create deployment nginx-tools --image nginx:alpine --output=yaml --dry-run=client apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: nginx-tools name: nginx-tools # ... 省略 # kubectl create namespace hello --dry-run=client -o yaml apiVersion: v1 kind: Namespace metadata: creationTimestamp: null name: hello # ... 省略 可以看到, k8s api 中都有一个对应的 kind 描述资源类型, 这个正好符……

阅读全文

开发 k8s 管理平台 - k8sailor 06. 使用 api/biz/dao 分层结构管理数据请求,获取 deployment 数据

开发 k8s 管理平台 - k8sailor 06. 使用 api/biz/dao 分层结构管理数据请求,获取 deployment 数据 原文地址: https://tangx.in/posts/books/k8sailor/chapter02/06-get-all-deployments/ tag: https://github.com/tangx/k8sailor/tree/feat/06-get-all-deployments client -> apis -> biz -> dao -> 将业务逻辑部分分为经典三层,想法是这样的,可能实现有错误。 apis 接入层: 只用于管理 http 请求与交互。 biz 业务层: 用于处理 api 层来的请求, 封装原始数据 dao 数据访问层: 与数据库, cluster 等交互。 存取数据。 重新调整目……

阅读全文

gin 实现首页不缓存

在 gin 中实现首页不缓存 之前提到了在 nginx 中添加响应头 Cache-Control: no-cache 不缓存首页, 以便每次发布 CDN 都能回源到最新的资源。 nginx 的配置可能都是实施人员的操作, 或许不在掌控范围内。 自己控制起来很简单, 无非就是加一个 Header 头嘛。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // 一……

阅读全文

gin 内部重定向时 middleware 不可用异常

gin 内部重定向时 middleware 不可用异常 axios 请求时出现 cors error 在使用 axios 请求后端时,遇到 cors 跨域问题, 虽然已经在 gin 中添加了 cors 的 middleware 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 func cors() gin.HandlerFunc { return func(c *gin.Context) { method := c.Request.Method origin := "*" if method != "" { c.Header("Access-Control-Allow-Origin", origin) // 可将将 * 替换为指定的域名 c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE") c.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization,X-Token") c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Cache-Control, Content-Language, Content-Type") c.Header("Access-Control-Allow-Credentials", "true") } if method == "OPTIONS" { c.AbortWithStatus(http.StatusNoContent) } } } 问题原因 gin Middleware……

阅读全文

ginbinder 一次绑定所有 request 参数

ginbinder 一次绑定 Request 中所有需要的数据 Usage 废弃/不可用: 弃用原生 tag form tag。 保持: 使用 tag uri 绑定路径中的参数。 作用于某个字段 就是 example.com/:some/:path 中 冒号后面的 保持: 使用 tag header 绑定 header。 作用于某个字段 新增: 新增 tag query tag 绑定通过 Query 传递的参数。 作用于某个字段 就是 example.com/some/path?a=1&b=2 中 问号后面的那一串 新增: 新增 tag cookie 绑定 cookie 中 简单 的键……

阅读全文

golang gin 使用 context 实现 ioc

golang gin 使用 context 实现 ioc gin 是一个流行的 golang webserver 的框架。 https://github.com/gin-gonic/gin gin 中 HandlerFunc (type HandlerFunc func(*Context)) 的使用随处可见, ex. Middleware , Handler 中。 1 2 3 4 router.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.String(http.StatusOK, "Hello %s", name) }) 因此,根据之前 golang context 实现 IoC 容器经验, 使用 *gin.Context 作为 IoC 容器再好不过了。 标准库 context.Context 是一个接口(interface), gin.Context 是 gin 工程自己封装的的一个 struct, 并实现了该接口。 虽然……

阅读全文

福利派送

  • (免费星球)「运维成长路线」

  • 又拍云免费 CDN

最近文章

分类

标签

其它