允许您高效开发Web 服务的Golang 依赖注入框架已经消失。
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/zh/
文章目录
HTTP 注入指令HTTP 依赖注入标签格式支持注入类型和响应标签。 查询参数注入属性类型是简单类型[1] 属性类型是简单类型的数组。 属性类型是结构或结构指针。
URL路径参数注入正文注入请求标头注入Cookie注入高级URL结构注入请求标头注入上下文结构注入请求结构注入请求响应接口注入
状态
HTTP 注入说明
HTTP 依赖注入标签的格式
${属性名称} ${属性类型} Gone:\’http,${Type}=${Key}\’
例子:
router.GET(\’/search\’, 函数(在结构{
选择[]int `gone:\’http,query=select\’`
}){
//注入in.selects的值为`[]int{1,2,3}`
fmt.Printf(\’%v\’, in.selects)
})
在上面的例子中,
selects是属性名称(attributeName),[]int是属性类型(attributeType),query是注入类型(kind),select是注入键值(key)。
支持注入的类型和响应标签
名称属性类型${attributeType} 注入类型${kind} 注入键值${key} 描述上下文注入已消失。 Context //(不推荐)注入gin 请求上下文对象,类型为${kind} ,键值${ not required key}。上下文注入*gone.Context//(推荐)注入gin 请求上下文指针,不需要类型${kind} 和键值${key}。请求注入http.Request//已弃用) 不需要注入http.Request 对象、类型${kind} 和键值${key}。请求注入*http.Request//(推荐)注入http.Request 指针,不需要类型${kind} 和键值${key}。地址注入url.URL //(已弃用) 不需要注入url.URL、类型${kind} 和键值${key}。地址注入*url.URL//(推荐)注入类型为${kind}且无键值${key}的url.URL指针。 Insert request header into http.Header //(推荐)插入http.Header(请求头),不指定类型${kind}和键值${key}。不再需要响应注入。 ResponseWriter//注入gin.ResponseWriter(用于直接写入响应数据)。类型${kind} 和键值${key} 不是必需的。结构体注入、结构体指针/主体注入。解析请求主体并将其注入到属性中。不需要“注入键值${key}”。基于Content-Type和其他格式的json或xml。每个请求处理函数只允许一次主体注入。请求标头单值插入编号| stringheader 默认字段名称用于检索键值为${key} 的请求标头。如果无法解析属性类型,则返回参数错误。 URL路径参数注入编号| stringparam 获取默认字段名,以“注入键值${key}”为key调用函数ctx.Param(key),获取URL中定义的参数值。属性类型支持简单。如果无法解析类型[1],则查询参数注入编号|[]编号结构体指针查询使用“注入键值|”。以{key}\”为key调用函数ctx.Query(key),检索查询的参数和属性。类型支持简单类型[1],支持简单类型数组、结构体并支持指针。如果无法解析,返回参数错误。 Cookie 注入编号| stringCookie 默认为“注入键值${key}”键入的字段名称。调用函数ctx.Context.Cookie(key) 获取cookie 的值。属性类型支持简单类型[1]。如果无法解析,则返回参数错误。
Query参数注入
属性类型为简单类型[1]
如果无法解析,则返回参数错误。
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
yourName string `gone:\’http,query=name\’` //注册请求查询的名称参数
name string `gone:\’http,query\’` //注册请求query中的name参数。如果未指定参数名称,则使用属性名称作为参数名称。
age int `gone:\’http,query=age\’` //int类型
}) 细绳{
return fmt.Sprintf(\’你好%s,你的名字是%s\’, in.yourName, in.name)
},
)
属性类型为简单类型的数组
如果无法解析,则返回参数错误。
在以下代码中,查询为?keyword=gonekeyword=iskeyword=best,in.keywords 的值为[]string{\’gone\’,\’is\’,\’best\’}。
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
Keyword []string `gone:\’http,query=keyword\’` //简单查询数组参数注入
}) 细绳{
return fmt.Sprintf(\’你好,关键字是[%v]\’, in.keywords)
},
)
属性类型为结构体或者结构体指针
没有必要指定这种类型的密钥。如果查询为?page=1pageSize=20keyword=gonekeyword=iskeyword=best,则in.req 的值为{1,20,[]string{\’gone\’,\’。 is\’,\’best \’}}; 请注意,表单标签可以在属性映射结构中使用。
如果无法解析,则返回参数错误。
类型请求结构体{
页面字符串`form:\’page\’`
PageSize 字符串`form:\’pageSize\’`
关键字[] 字符串`form:\’关键字\’`
}
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
req 请求`gone:\’http,查询\’`
req2 *请求`gone:\’http,查询\’`
}) 细绳{
fmt.Println(in.req)
return fmt.Sprintf(\’你好,关键字是[%v]\’, in.req.Keywords)
},
)
URL路径参数注入
URL路径参数是指URL路由中定义的参数。插入的属性类型支持string、int、uint、float64等数值类型。如果无法解析,则返回参数错误。如下:
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/hello/:name\’, //URL中定义的参数名为name
函数(结构{
name string `gone:\’http,param\’` //不指定参数名称,使用属性名称作为参数名称
name2 string `gone:\’http,param=name\’` //使用key指定参数名称
}) 细绳{
返回\’你好,\’ + in.name
},
)
Body注入
主体注入是指读取HTTP请求主体的内容并将其解析为结构体。插入的属性类型支持结构和结构指针。如果无法解析,则返回参数错误。
支持多种ContentType:json、xml、form-data、form-urlencoded等。如果不传递ContentType,则默认为application/x-www-form-urlencoded。
通过此结构,您可以使用form 标签进行form-data 和form-urlencoded 属性映射,使用xml 标签进行xml 属性映射,使用json 标签进行json 属性映射。
具体规则请参见gin#Model Binding and Validation。
一个例子是:
类型请求结构体{
页面字符串`form:\’page\’ json:\’page,omitempty\’ xml:\’page\’ binding:\’required\’`
PageSize String `form:\’pageSize\’ json:\’pageSize,omitempty\’ xml:\’pageSize\’ binding:\’required\’`
关键字[] string `form:\’关键字\’ json:\’关键字,omitempty\’ xml:\’关键字\’绑定:\’必需\’`
}
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
req Req `gone:\’http,body\’` //注意:body只能插入一次,因为writer读完后为空。
//req2 *Req `gone:\’http,body\’`
}) 细绳{
fmt.Println(in.req)
return fmt.Sprintf(\’你好,关键字是[%v]\’, in.req.Keywords)
},
)
请求头注入
HTTP请求头注入用于获取具体的请求头信息。插入的属性类型支持string、int、uint、float64等数字类型。如果无法解析,则返回参数错误。
例如,您可以使用以下代码读取请求头中的Content-Type信息:
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
contentType string `gone:\’http,header\’` //不指定参数名,使用属性名作为参数名
contentType2 string `gone:\’http,header=contentType\’` //使用key指定参数名称
}) 细绳{
返回\’你好,contentType=\’ + in.contentType
},
)
Cookie注入
Cookie注入用于获取特定的cookie信息。插入的属性类型支持string、int、uint、float64等数值类型。如果无法解析,则返回参数错误。
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
token string `gone:\’http,cookie\’` //不指定参数名,使用属性名作为参数名
token2 string `gone:\’http,header=token\’` //使用key指定参数名称
}) 细绳{
return \’你好,这是cookie中的token\’ + in.token
},
)
高级
此外,它还支持一些特殊结构(或结构指针、接口、映射)的注入。 Golang 的“值复制”鼓励指针注入,因此这些结构体代表HTTP 请求、响应、上下文等。这些结构不是身体注射。必须指定类型和密钥。
URL结构体注入
支持的属性类型为url.URL 或*url.URL。该类型在net/url 包中定义,表示HTTP 请求的URL。
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
url *url.URL `gone:\’http\’` //使用结构体指针
url2 url.URL `gone:\’http\’` //使用结构体
}) 细绳{
return \’你好,这是cookie中的token\’ + in.token
},
)
请求头注入
支持的属性类型是http.Header。它在net/http 包中定义,表示HTTP 请求的标头。
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
标头http.Header `gone:\’http\’`
}) 细绳{
return \’你好,这是cookie中的token\’ + in.token
},
)
上下文结构体注入
支持的属性类型为gin.Content 或*gin.Content。该类型在github.com/gin-gonic/gin 包中定义,表示HTTP 请求的上下文。
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
context *gin.Content `gone:\’http\’` //使用结构体指针
context2 gin.Content `gone:\’http\’` //使用结构体
}) 细绳{
return \’你好,这是cookie中的token\’ + in.token
},
)
请求结构体注入
支持的属性类型为http.Request 或*http.Request。该类型定义在net/http包中,表示HTTP请求信息。
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
request *http.Request `gone:\’http\’` //使用结构体指针
request2 http.Request `gone:\’http\’` //使用结构体
}) 细绳{
return \’你好,这是cookie中的token\’ + in.token
},
)
请求响应接口注入
支持的属性类型为gin.ResponseWriter,定义在github.com/gin-gonic/gin 包中,可以使用该接口来响应请求信息。
ctr.rootRouter。
组(\’/演示\’)。
邮政(
\’/你好\’,
函数(结构{
作家gin.ResponseWriter `gone:\’http\’`
}) 细绳{
return \’你好,这是cookie中的token\’ + in.token
},
)
备注
[1] 简单类型是指字符串、布尔类型和数值类型。数字类型包括:
整数类型:int、uint、int8、uint8、int16、uint16、int32、uint32、int64、uint64 非负整数类型:uint、uint8、uint16、uint32、uint64 浮点类型:float32、float64
以上关于#Gone Framework简介33的相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91511.html