
Security News
Deno 2.6 + Socket: Supply Chain Defense In Your CLI
Deno 2.6 introduces deno audit with a new --socket flag that plugs directly into Socket to bring supply chain security checks into the Deno CLI.
这是一个go的web项目框架(脚手架),可以让你3分钟内建立自己可用的Go Web项目。
{
"code":"100200",
"msg":"成功",
"data":null
}
package main
import (
"errors"
"github.com/gin-gonic/gin"
"github.com/xiaojun207/gin-boot/boot"
"log"
"net/http"
)
type Foo struct {
Username string `json:"username" form:"username" binding:"required"`
Password string `json:"password" form:"password"`
}
type Page struct {
boot.BindQuery // 继承boot.BindQuery的结构体,指定绑定到url参数
PageNum int `json:"page_num" form:"page_num"` // url 中的参数,需要用tag 'form' 标识,才能自动绑定
PageSize int `json:"page_size" form:"page_size"` // url 中的参数,需要用tag 'form' 标识,才能自动绑定
}
type QueryHeader struct {
boot.BindHeader
Authorization string `header:"authorization"`
}
// /testPost
// 入参可以自动填充到结构体,如果是POST,则将http body数据填充到结构体;
// 返回数据,可以是任意数据类型。如果数据不是boot.ApiResp,则返回数据会被包装为boot.ApiResp的json数据;<br>
// 如果handler执行异常,请求返回会被包装为系统异常
// 参数page继承boot.BindQuery的结构体,绑定url参数
func TestPost1Handler(c *gin.Context, req *Foo, page Page, header QueryHeader) boot.ApiResp {
log.Println("TestPost1Handler.req:", req.Username, ",Password:", req.Password)
log.Println("TestPost1Handler.page.PageNum:", page.PageNum, ",PageSize:", page.PageSize)
log.Println("TestPost1Handler.Authorization:", header.Authorization)
return boot.ApiResp{Code: "100200", Msg: "Success", Data: "TestData: " + req.Username}
}
// /testGetEmpty
// 空返回值包装测试,返回:{"code":"100200","data":null,"msg":"成功"}
func TestGetEmptyHandler(c *gin.Context, req *Foo) {
log.Println("TestGetEmptyHandler.req.username:", req.Username, ",password:", req.Password)
}
// 空返回值包装测试,返回:{"code":"100200","data":null,"msg":"成功"}
func TestGetHandler(c *gin.Context, page Page, header QueryHeader) {
log.Println("TestGetHandler.page.PageNum:", page.PageNum, ",PageSize:", page.PageSize)
log.Println("TestGetHandler.Authorization:", header.Authorization)
log.Println("TestGetHandler")
}
// 异常全局处理测试,返回:{"code":"100101","data":null,"msg":"TestPost2Handler.TestError"}
func TestPost2Handler(c *gin.Context, req *Foo) {
log.Println("TestPost2Handler.req.username:", req.Username, ",password:", req.Password)
panic(errors.New("TestPost2Handler.TestError"))
}
// /testGet?username=admin12&password=1234&page_num=1&page_size=10
// url 中的参数,需要用tag 'form' 标识
// 也可以使用gin方法, GET类型的请求,query参数也可以自动装填到结构体
func TestGet1Handler(c *gin.Context, req *Foo, page Page) interface{} {
log.Println("TestGet1Handler.req.username:", req.Username, ",password:", req.Password)
log.Println("TestGet1Handler.page.PageNum:", page.PageNum, ",PageSize:", page.PageSize)
data := map[string]interface{}{
"list": []*Foo{req},
"page": page,
}
log.Println("TestGet1Handler.data:", data)
return data
}
func AuthInterceptor(c *gin.Context, header http.Header) {
authorization := c.GetHeader("authorization")
log.Println("AuthInterceptor.authorization:", authorization)
if authorization == "" {
log.Println("AuthInterceptor authorization is null")
boot.Resp(c, "105101", "账户未登录", "")
c.Abort()
return
}
//TODO getUid By authorization
id := 100
c.Set("uid", id)
}
var webRouter = func(router *boot.WebRouter) {
//router.Use(AuthInterceptor)
// 静态资源
router.StaticFile("/", "./views/index.html")
router.StaticFS("/static/", http.Dir("./views/static/"))
// 动态API
router.POST("/testPost", AuthInterceptor, TestPost1Handler)
router.POST("/testPost2", TestPost2Handler)
router.GET("/testGetEmpty", TestGetEmptyHandler)
router.GET("/testGet", TestGetHandler)
router.GET("/testGet1", AuthInterceptor, TestGet1Handler)
apiRouter := router.Group("/api/")
apiRouter.GET("/test", TestPost2Handler)
}
func main() {
boot.Start("8088", "/", webRouter)
}
FAQs
Unknown package
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Deno 2.6 introduces deno audit with a new --socket flag that plugs directly into Socket to bring supply chain security checks into the Deno CLI.

Security News
New DoS and source code exposure bugs in React Server Components and Next.js: what’s affected and how to update safely.

Security News
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.