@
1. 定义路由服务
我们写一个简单的K8S示例来做完整示例:
| package router |
| |
| import ( |
| "github.com/gin-gonic/gin" |
| ) |
| |
| func Server() { |
| r := gin.Default() |
| |
| groupV1 := r.Group("/api/v1") |
| { |
| groupV1.GET("/ping", Ping) |
| } |
| |
| deployment := r.Group("/api/v1/deployment") |
| { |
| deployment.GET("/list",GetDeploymentList) |
| deployment.GET("/",GetDeployment) |
| deployment.DELETE("/",DeleteDeployment) |
| deployment.POST("/",CreateDeployment) |
| deployment.PUT("/image",ApplyDeploymentByImage) |
| deployment.PUT("/replicas",ApplyDeploymentByReplicas) |
| } |
| |
| r.Run(":1840") |
| } |
2.1 Get方法
Query(Params方式)
| deploymentName := c.Query("deployment_name") |
| func GetDeployment(c *gin.Context) { |
| namespaceName := c.Query("namespace_name") |
| deploymentName := c.Query("deployment_name") |
| clientSet,err := service.ConnectK8s() |
| if err !=nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| |
| deploymentInfo,err := service.GetDeployment(clientSet,namespaceName,deploymentName) |
| if err != nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| fmt.Printf("%+v\n",deploymentInfo) |
| c.JSON(200,deploymentInfo) |
| } |
说明:(c *gin.Context)
必须要传入
- postman调用

2.2 Post方法
BindJSON (Body=>raw=>JSON)
| type DeploymentQueryParams struct { |
| NamespaceName string `json:"namespace_name"` |
| DeploymentName string `json:"deployment_name"` |
| ImageName string `json:"image_name"` |
| PortNum int32 `json:"port_num"` |
| Replica int32 `json:"replica"` |
| } |
| err := c.BindJSON(&deploymentQueryParams) |
| func CreateDeployment(c *gin.Context) { |
| var deploymentQueryParams service.DeploymentQueryParams |
| |
| err := c.BindJSON(&deploymentQueryParams) |
| if err !=nil{ |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| |
| clientSet,err := service.ConnectK8s() |
| if err !=nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| |
| deploymentInfo,err := service.CreateSimpleDeployment(clientSet,deploymentQueryParams) |
| if err != nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| fmt.Printf("%+v\n",deploymentInfo) |
| c.JSON(200,deploymentInfo) |
| } |
- postman调用

PostForm(Body=>form-data)
| deploymentName := c.PostForm("deployment_name") |
参见2.3 PUT方法
中"PostForm(Body=>form-data)" 部分。
2.3 PUT方法
BindJSON (Body=>raw=>JSON)
| err := BindJSON(&deploymentQueryParams) |
| func ApplyDeploymentByImage(c *gin.Context) { |
| var deploymentQueryParams service.DeploymentQueryParams |
| c.BindJSON(&deploymentQueryParams) |
| |
| clientSet,err := service.ConnectK8s() |
| if err !=nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| |
| deploymentInfo,err := service.ApplyDeploymentByImage(clientSet,deploymentQueryParams.NamespaceName,deploymentQueryParams.DeploymentName,deploymentQueryParams.ImageName) |
| if err != nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| fmt.Printf("%+v\n",deploymentInfo) |
| c.JSON(200,deploymentInfo) |
| } |
- postman 调用

PostForm(Body=>form-data)
| deploymentName := c.PostForm("deployment_name") |
修改一下上例(BindJSON)
| func ApplyDeploymentByImageA(c *gin.Context) { |
| namespaceName := c.PostForm("namespace_name") |
| deploymentName := c.PostForm("deployment_name") |
| imageName := c.PostForm("image_name") |
| clientSet,err := service.ConnectK8s() |
| if err !=nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| |
| deploymentInfo,err := service.ApplyDeploymentByImage(clientSet,namespaceName,deploymentName,imageName) |
| if err != nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| |
| fmt.Printf("%+v\n",deploymentInfo) |
| c.JSON(200,deploymentInfo) |
| } |
2.4 DELETE方法
Query(Params方式)
| deploymentName := c.Query("deployment_name") |
| func DeleteDeployment(c *gin.Context) { |
| namespaceName := c.Query("namespace_name") |
| deploymentName := c.Query("deployment_name") |
| clientSet,err := service.ConnectK8s() |
| if err !=nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| |
| err = service.DeleteDeployment(clientSet,namespaceName,deploymentName) |
| if err != nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| }else { |
| c.JSON(200,"删除成功") |
| } |
| } |
- postman 调用

PostForm(Body=>form-data)
| deploymentName := c.PostForm("deployment_name") |
| func DeleteDeployment(c *gin.Context) { |
| namespaceName := c.PostForm("namespace_name") |
| deploymentName := c.PostForm("deployment_name") |
| clientSet,err := service.ConnectK8s() |
| if err !=nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| err = service.DeleteDeployment(clientSet,namespaceName,deploymentName) |
| if err != nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| }else { |
| c.JSON(200,"删除成功") |
| } |
| } |
Param (Path)
因为我们在k8s这个场景下不能一下定位到需要操作的资源,因此并不合适使用该方式,所以就不写完整示例了,只写一个样例:
| deployment.PUT("/:uuid",DeleteDeploymentA) |
3. main函数调用路由服务
| func main() { |
| router.Server() |
| } |
4. 数据返回和错误处理
| c.JSON(200,deploymentInfo) |
| if err !=nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
见 “2. 定义headers函数”中各示例均可看到:
| func GetDeployment(c *gin.Context) { |
| namespaceName := c.Query("namespace_name") |
| deploymentName := c.Query("deployment_name") |
| clientSet,err := service.ConnectK8s() |
| if err !=nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| |
| deploymentInfo,err := service.GetDeployment(clientSet,namespaceName,deploymentName) |
| if err != nil { |
| c.JSON(400, gin.H{"error": err.Error()}) |
| return |
| } |
| fmt.Printf("%+v\n",deploymentInfo) |
| c.JSON(200,deploymentInfo) |
| } |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律