gin

吾八哥学k8s(二):golang服务部署到kubernetes

三世轮回 提交于 2020-04-22 06:26:37
本篇主要讲解如何将golang的服务部署到kubernetes集群里,附带相关的golang的demo和yml文件内容。纯新手入门方式,生产服务需要完整的CI/CD流程来支持。 golang服务代码 这里简单写一个k8s-demo的服务,提供两个接口ping和version接口,main.go文件代码如下: package main import ( "net/http" "github.com/gin-gonic/gin" ) func statusOKHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"status": "success"}) } func versionHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"version": "v1.0"}) } func main() { router := gin.New() router.Use(gin.Recovery()) router.GET("/ping", statusOKHandler) router.GET("/version", versionHandler) router.Run(":8080") }    构建命令:CGO_ENABLED=0 GOOS=linux GOARCH=amd64

gin系列- 路由及路由组

牧云@^-^@ 提交于 2020-04-22 00:26:26
路由及路由组 package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() //访问/index的GET请求会走这一条处理逻辑 //获取信息 r.GET("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "GET", }) }) //创建某个信息 r.POST("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "POST", }) }) //更新某个信息 r.PUT("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "PUT", }) }) //删除某个信息 r.DELETE("/index", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "method": "DELETE", }) }) //处理所有的请求方法 r.Any("/user", func(c *gin.Context) { switch c.Request

gin系列-文件上传

删除回忆录丶 提交于 2020-04-21 23:46:07
单文件上传 前端 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form action="/upload" method="post" enctype="multipart/form-data"> //upload跳转控制 <input type="file" name="f1"> //和c.FormFile一致 <input type="submit" value="上传"> </form> </body> </html> 后端 #main.go package main import ( "github.com/gin-gonic/gin" "net/http" "path" ) func main() { r := gin.Default() //处理multipart forms提交文件时默认的内存限制是32 MiB r.MaxMultipartMemory = 8 //router.MaxMultipartMemory = 8 << 20 // 8 MiB r.LoadHTMLFiles("./index.html") r.GET("/index", func(c *gin.Context) { c.HTML(http

gin系列-重定向

て烟熏妆下的殇ゞ 提交于 2020-04-21 20:50:55
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() //http重定向 r.GET("/index", func(c *gin.Context) { //c.JSON(http.StatusOK, gin.H{ // "status": "ok", //}) //跳转到sogo c.Redirect(http.StatusMovedPermanently, "https://www.sogo.com") }) //路由重定向 r.GET("/luyou", func(c *gin.Context) { //跳转到/luyou2对应的路由处理函数 c.Request.URL.Path = "/luyou2" //把请求的URL修改 r.HandleContext(c) //继续后续处理 }) r.GET("/luyou2", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message":"路由重定向", }) }) r.Run(":9090") } 来源: oschina 链接: https://my.oschina.net/u/4396922/blog/3289995

gin系列-参数绑定

自闭症网瘾萝莉.ら 提交于 2020-04-21 20:48:58
为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的Content-Type识别请求数据类型并利用反射机制自动提取请求中QueryString、form表单、JSON、XML等参数到结构体中。 下面的示例代码演示了.ShouldBind()强大的功能,它能够基于请求自动提取JSON、form表单和QueryString类型的数据,并把值绑定到指定的结构体对象。 前端 #index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ShouldBind</title> </head> <body> <form action="/form" method="post"> 用户名: <input type="text" name="username"> 密码: <input type="password" name="password"> <input type="submit" value="提交"> </form> </body> </html> 后端 #main.go package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) type UserInfo struct { Username

go保存文件到指定的文件夹

烂漫一生 提交于 2020-04-21 00:22:19
框架:gin 语言:golang 作用:保存文件到本地指定文件夹的一个小demo 单文件保存到本地指定目录: package main import ( "fmt" "log" "net/http" "path" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.POST("/fileUpload", func(c *gin.Context) { //获取文件(省略了错误处理) file, _ := c.FormFile("file") // 打印日志 log.Println(file.Filename) // 设置文件需要保存的指定位置并设置保存的文件名字 dst := path.Join("./upload", file.Filename) // 自定义文件名称,需要带上文件的格式后缀 // dst := path.Join("./upload", "tupian.jpg") //将文件保存到本地服务器的指定位置 c.SaveUploadedFile(file, dst) // 返回数据 c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename)) }) r.Run(":8001") } } 多文件和单文件类似

用golang实现一个小程序商城后台系统(moshopserver)

倖福魔咒の 提交于 2020-04-20 14:47:11
用golang实现一个小程序商城后台系统(moshopserver) golang和c/c++比起来是一门新的语言,一直想学,网上搜集了一些资料,有些人说很容易上手,确实是这样,和C/C++比起来,少了很多乱七八糟的语法。学一门新的语言,最好的方法就是动手写一些东西,最近小程序也比较火,也想学一下,网络上搜索的一些开源项目,基本上没有golang实现的,大部分都是nodejs和java写的,那么我就来实现一个golang版的吧,一石二鸟。 开发小程序前后端都需要开发,自己的前端经验很少,搜索了一些开源代码,有一个小程序项目让人眼前一亮, Nideshop ,界面做的不错,代码结构也清晰,而且前后端都实现了,自己的目标是学习golang和小程序,干脆用golang重写nideshop吧。 Web框架的选择 nodejs和java已经一些很成熟的框架了,比如nodejs的thinkjs,java的spring框架。golang最近几年才火起来,有一些web框架也比较新,有下面一些框架: Beego:开源的高性能 Go 语言 Web 框架。 https://github.com/astaxie/beego https://beego.me Buffalo:使用 Go 语言快速构建 Web 应用。 https://github.com/gobuffalo/buffalo https:/

[开源]Gin + GORM + Casbin+vue-element-admin 实现权限管理系统(golang)

走远了吗. 提交于 2020-04-19 05:22:52
简析 基于 Gin + GORM + Casbin + vue-element-admin 实现的权限管理系统。 基于Casbin 实现RBAC权限管理。 前端实现: vue-element-admin。 开源地址见文末。 特性 基于 Casbin 的 RBAC 访问控制模型; JWT 认证; 前后端分离。 下载并运行 获取代码 go get -v github.com/it234/goapp 运行 运行服务端:cd cmd/manageweb,go run main.go,运行成功后打开 127.0.0.1:8080。 调试/运行web:cd website/manageweb,npm install,npm run dev。 配置文件在(cmd/manageweb/config.yaml)中,用户默认为:admin/123456。 在线体验: http://35.241.100.145:5315 。 也可以直接下载打包好的桌面客户端体验,下载地址: https://pan.baidu.com/s/1wDsHH-KMQHV5tMRUv50Q3w 提取码: 9u2d。 温馨提醒 默认配置采用的是 sqlite 数据库,数据库文件(自动生成)在cmd/manageweb/data/goapp.db。如果想切换为mysql或postgres,请更改配置文件,并创建数据库(表会自动创建)

https://github.com/appleboy/gin-jwt包函数的执行顺序

蹲街弑〆低调 提交于 2020-04-18 06:54:46
这个还是比较正规的, 但看代码时,需要了解函数的执行顺序。 token生成: Authenticator-》PayloadFunc token验证: IdentityHandler-》Authorizator Login request flow (using the LoginHandler) PROVIDED: LoginHandler This is a provided function to be called on any login endpoint, which will trigger the flow described below. REQUIRED: Authenticator This function should verify the user credentials given the gin context (i.e. password matches hashed password for a given user email, and any other authentication logic). Then the authenticator should return a struct or map that contains the user data that will be embedded in the jwt token.

[Gin] 路由分组 Group 的内部实现 与 块空间 { } 的应用

陌路散爱 提交于 2020-04-16 12:39:38
【推荐阅读】微服务还能火多久?>>> 通过这篇 [Gin] 单文件极简 HTTP Server 流程分析 ( gin-gonic/gin ) 我们知道了 gin.go 中的 Engine 继承有 routergroup.go 中的 RouterGroup 结构,从而获得其所有方法。 RouterGroup 结构有一个方法 Group 是处理分组的,分组的目的可以是出于路径归类 或者 为了使用相同的中间件。 // routergroup.go // Group creates a new router group. You should add all the routes that have common middlewares or the same path prefix. // For example, all the routes that use a common middleware for authorization could be grouped. func (group *RouterGroup) Group(relativePath string , handlers ...HandlerFunc) * RouterGroup { return & RouterGroup{ Handlers: group.combineHandlers(handlers),