httprouter

[Go] CORS 支持多个 origin 访问的思路 (Access-Control-Allow-Origin 部分)

為{幸葍}努か 提交于 2020-08-19 20:51:55
以下为局部伪代码,仅供参考: var allowOrigin string allowOrigins := config.AppConf.Get("middleware.cors.allowOrigins").(string) if strings.Contains(allowOrigins, "*") { allowOrigin = "*" } else { origin := c.GetHeader("Origin") if strings.Contains(allowOrigins, origin) { allowOrigin = origin } } if allowOrigin != "" { c.Writer.Header().Set("Access-Control-Allow-Origin", allowOrigin) } 思路是,配置中如果配置了允许任何域名跨域访问,则设置 Access-Control-Allow-Origin 为 “*”。 其次如果当前 origin 被允许,那么设置 Access-Control-Allow-Origin 为当前 origin。 其余情况不设置 Access-Control-Allow-Origin。 [Go] httprouter 自动 OPTIONS 响应 和 CORS [Go] Viper 加载项目配置,go build

Gin_路由

点点圈 提交于 2020-07-28 07:28:27
1. 基本路由 gin 框架中采用的路由库是基于httprouter做的 1、router:=gin.Default():这是默认的服务器。使用gin的Default方法创建一个路由Handler; 2、然后通过Http方法绑定路由规则和路由函数。不同于net/http库的路由函数,gin进行了封装,把request和response都封装到了gin.Context的上下文环境中。 3、最后启动路由的Run方法监听端口。还可以用http.ListenAndServe(":8080", router),或者自定义Http服务器配置。 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 ( "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() //不带默然中间件的路由 //r := gin.New() //Handle r.Handle( "GET" , "/" , func (context *gin.Context) { }) //直接使用httpMethod r.GET( "/" , func (c *gin.Context) { c.String

Go语言(十三)Gin Web框架

大城市里の小女人 提交于 2020-04-21 20:59:40
简介 基于httprouter开发的web框架: https://github.com/gin-gonic/gin 提供Martini风格的API,但比Martini要快40倍 非常轻量级,使用简洁 Gin框架的安装与使用 安装: go get -u github.com/gin-gonic/gin 基本使用 import "github.com/gin-gonic/gin" func main () { r := gin.Default() r.GET( "/ping" , func(c *gin.Context) { c.JSON( 200 , gin.H{ "message" : "pong" , }) }) r.Run( "0.0.0.0:9090" ) } 支持restful风格的API 把设计的API抽象成一个个资源,用URI来标识 针对每一个资源,使用统一的方法进行操作 统一的方法: GET,POST,PUT,DELETE import ( "github.com/gin-gonic/gin" "net/http" ) type Result struct { Message string `json: "message" ` Code int `json: "code" ` } func handleUserInfo (c *gin.Context) { var

Golang Web入门(2):如何实现一个高性能的路由

孤街醉人 提交于 2020-04-21 02:28:48
摘要 在 上一篇文章 中,我们聊了聊在Golang中怎么实现一个Http服务器。但是在最后我们可以发现,固然 DefaultServeMux 可以做路由分发的功能,但是他的功能同样是不完善的。 由 DefaultServeMux 做路由分发,是不能实现 RESTful 风格的API的,我们没有办法定义请求所需的方法,也没有办法在 API 路径中加入 query 参数。其次,我们也希望可以让路由查找的效率更高。 所以在这篇文章中,我们将分析 httprouter 这个包,从源码的层面研究他是如何实现我们上面提到的那些功能。并且,对于这个包中最重要的 前缀树 ,本文将以图文结合的方式来解释。 1 使用 我们同样以怎么使用作为开始,自顶向下的去研究 httprouter 。我们先来看看官方文档中的小例子: package main import ( "fmt" "net/http" "log" "github.com/julienschmidt/httprouter" ) func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { fmt.Fprint(w, "Welcome!\n") } func Hello(w http.ResponseWriter, r *http.Request, ps

二次开发rpcx-gateway支持非golang梳理

我们两清 提交于 2020-04-18 01:20:45
rpcx-gatewa的调用是是流程源码梳理 功能实现 API define handle 让网关支持自定义路由, 可以根据自定义的理由,网关直接调用相应的服务,直接是二层服务的架构,减少客户端(消费者)这一层程序 // 关键代码 router.POST("/echo", g.EchoHandle) // 消费echo服务 func (g *Gateway) EchoHandle(w http.ResponseWriter, r *http.Request, params httprouter.Params) { // API router的定义范例 svc := "Echo" call := "Say" g.handleRequestApi(w, r, svc, call) 在HttpRequest2RPCRequest的逻辑判断中,判断是否属于golang的服务端,分开进行服务端的调用逻辑,可灵活接入不同语言实现的服务端 // 判断是否为golang服务端的关键代码,非golang服务端会把语言的定义放在metadata里面 // 在创建xClient时,会根据语言的类型设置 isGo 属性 for _, v := range servers { if strings.Index(v, "typ=py") != -1 { // 为非go语言 client.isGo =

Serve static content on root and rest on /api

≡放荡痞女 提交于 2019-12-24 08:01:49
问题 I'm using httprouter for parsing some parameters from the path in api calls: router := httprouter.New() router.GET("/api/:param1/:param2", apiHandler) And wanted to add some files to the root ( / ) to serve. It's just index.html , script.js and style.css . All in a local directory called static router.ServeFiles("/*filepath", http.Dir("static")) So that I can go with the browser to localhost:8080/ and it will serve index.html and the js from the browser will call the /api/:param1/:param2 But