首页 > 其他分享 >Goweb开发之Iri框架实战,Goweb开发架构设计

Goweb开发之Iri框架实战,Goweb开发架构设计

时间:2023-11-11 12:12:15浏览次数:38  
标签:架构设计 func iris app Goweb Iri context Context name

Goweb开发之Iri框架实战,Goweb开发架构设计

一、基础学习

(一)网络请求方法

iris框架 创建的后端应用支持 Get、Post、Head、Options、Patch、Delete、Put方法

  1.   package irisLearn
  2.    
  3.   import (
  4.   "fmt"
  5.   "github.com/kataras/iris/v12"
  6.   "github.com/kataras/iris/v12/context"
  7.   )
  8.    
  9.   func Methods() {
  10.   app := iris.Default()
  11.    
  12.   app.Get("/someGet", getting)
  13.   app.Post("/somePost", posting)
  14.   app.Head("/someHead", heading)
  15.   app.Put("/somePut", putting)
  16.   app.Delete("/someDelete", deleting)
  17.   app.Patch("/somePatch", patching)
  18.   app.Options("/someOptions", optioning)
  19.    
  20.   app.Listen(":8080")
  21.    
  22.   }
  23.    
  24.   func optioning(c *context.Context) {
  25.   fmt.Println("optioning")
  26.   }
  27.    
  28.   func patching(c *context.Context) {
  29.   fmt.Println("patching")
  30.   }
  31.    
  32.   func deleting(c *context.Context) {
  33.   fmt.Println("deleting")
  34.   }
  35.    
  36.   func putting(c *context.Context) {
  37.   fmt.Println("putting")
  38.   }
  39.    
  40.   func heading(c *context.Context) {
  41.   fmt.Println("heading")
  42.   }
  43.    
  44.   func posting(c *context.Context) {
  45.   fmt.Println("posting")
  46.   }
  47.    
  48.   func getting(context *context.Context) {
  49.   fmt.Println("getting")
  50.   }

(二)路径中获取参数

在请求路径中可传入参数,但是在路径必须保证参数不为空,否则出现请求路径不一致的情况

使用方法

"/path/{parameter_name:parameter_type}"
 

实例代码

  1.   package irisLearn
  2.    
  3.   import "github.com/kataras/iris/v12"
  4.    
  5.   func ParametersInPath() {
  6.   app := iris.Default()
  7.    
  8.   // This handler will match /user/john but will not match /user/ or /user
  9.   app.Get("/user/{name}", func(context iris.Context) {
  10.   name := context.Params().Get("name")
  11.    
  12.   context.Writef("Hello %s", name)
  13.    
  14.   })
  15.    
  16.   app.Get("/user/{name:string}/{action:path}", func(context iris.Context) {
  17.   name := context.Params().Get("name")
  18.   action := context.Params().Get("action")
  19.    
  20.   message := name + action
  21.    
  22.   context.WriteString(message)
  23.    
  24.   })
  25.    
  26.   app.Post("/user/{name:string}/{action:path}", func(context iris.Context) {
  27.   b := context.GetCurrentRoute().Tmpl().Src == "/user/{name:string}/{action:path}"
  28.   context.Writef("%s", b)
  29.   })
  30.    
  31.   app.Listen(":8080")
  32.   }

验证请求

  1.    
  2.   $ curl -Method Get "http://localhost:8080/user/john/eating"
  3.    
  4.   // result
  5.   content:johneating

(三)获取请求路径中的参数

获取方法

  • 使用 Context.URLParamDefault("parameter_name","default_string")

  • 使用 Context.URLParam("parameter_name")

实例代码

  1.   package irisLearn
  2.    
  3.   import "github.com/kataras/iris/v12"
  4.    
  5.   func QuerystringParameters() {
  6.   app := iris.Default()
  7.    
  8.   app.Get("/welcome", func(context iris.Context) {
  9.   firstName := context.URLParamDefault("firstname", "john")
  10.   secondName := context.URLParam("secondname")
  11.    
  12.   context.Writef("Hello %s %s", firstName, secondName)
  13.   })
  14.    
  15.   app.Listen(":8080")
  16.   }

验证请求

  1.   $ curl "http://localhost:8080/welcome?firstname=lily&secondname=freak"
  2.    
  3.   // result
  4.   content:"Hello lily freak"

(四)获取Form表单数据

获取方法

  1.   Context.PostValue("parameter_name")
  2.   Context.PostValueDefault("parameter_name","default_value")

实例代码

  1.   package irisLearn
  2.    
  3.   import "github.com/kataras/iris/v12"
  4.    
  5.   func MultipartUrlencodedForm() {
  6.    
  7.   app := iris.Default()
  8.    
  9.   app.Post("/form_post", func(context iris.Context) {
  10.   message := context.PostValue("message")
  11.   nick := context.PostValueDefault("nick", "anonymous")
  12.    
  13.   context.JSON(iris.Map{
  14.   "status": "posted",
  15.   "message": message,
  16.   "nick": nick,
  17.   })
  18.   })
  19.    
  20.   app.Listen(":8080")
  21.   }

验证请求

  1.   $ curl -Method Post -Body {message="this is a message"} http://localhost:8080/form_post
  2.    
  3.    
  4.   //result
  5.   Content : {"message":"\"this is message\"","nick":"anonymous
  6.   ","status":"posted"}

(五)路由分组

获取方法

app.Party("path")

使用上述方法可以将path 路径作为一个分组,后续路径可以在这个分组中定义

实例代码

  1.   package irisLearn
  2.    
  3.   import (
  4.   "github.com/kataras/iris/v12"
  5.   "github.com/kataras/iris/v12/context"
  6.   )
  7.    
  8.   func GroupRoute() {
  9.   app := iris.Default()
  10.    
  11.   // v1是一个分组
  12.   v1 := app.Party("/v1")
  13.   {
  14.   v1.Post("/login",loginEndPoint)
  15.   }
  16.    
  17.   app.Listen(":8080")
  18.    
  19.   }
  20.    
  21.   func loginEndPoint(context *context.Context) {
  22.   fmt.Println("loginEndPoint")
  23.   }
  24.    
  25.    

(六)日志打印到文件

使用方法

app.Logger().SetOutput("file")

实例代码

  1.   package irisLearn
  2.    
  3.   import (
  4.   "github.com/kataras/iris/v12"
  5.   "os"
  6.   )
  7.    
  8.   func ApplicationFileLogger() {
  9.    
  10.   app := iris.Default()
  11.    
  12.   f, _ := os.Create("iris.log")
  13.   app.Logger().SetOutput(f)
  14.    
  15.   app.Get("/ping", func(context iris.Context) {
  16.   context.WriteString("pong")
  17.   })
  18.    
  19.   app.Listen(":8080")
  20.   }
   

标签:架构设计,func,iris,app,Goweb,Iri,context,Context,name
From: https://www.cnblogs.com/add1188/p/17825764.html

相关文章

  • GO实现分布式爬虫—掌握go语言通道与协程项目架构设计
    GO实现分布式爬虫—掌握go语言通道与协程项目架构设计Go高并发微服务分布式 1.命令行的用户管理 用户信息存储        =>内存        =>结构[]map        =>用户IDnameageteladdr            [len][]map......
  • 生成式AI横扫PG游戏领域:苹果计划重塑Siri,迎头赶上竞争对手
    今年,生成式AI风头正劲,而苹果似乎也在迎头赶上竞争对手。PGAPP游戏试玩家揭露,苹果正在对其Siri助手进行大规模改造,将引入更多AI功能,并计划将其作为iPhone16的主打特色之一。根据爆料客Revegnus的说法,苹果将用LLM(大型语言模型)对Siri进行改进,以提.升其AI能力,使其成为杀.手级AI应用,并......
  • 用 Ruby 的 Nokogiri 库抓取全国企业信用信息
    以下是一个使用Ruby的Nokogiri库编写的爬虫程序,用于爬取全国企业信用信息抓取网站上的内容。这个程序使用了一个爬虫ip服务器,爬虫ip服务器的地址是 duoip:8000。require'nokogiri'require'open-uri'#定义一个爬虫ip服务器proxy_host='duoip'proxy_port=8000#定......
  • 后端架构设计
    后端架构设计:1.用户管理模块1.1创建用户账户接口:POST/api/users功能:管理员通过提供用户名、密码和权限来创建新用户账户。处理:接收并验证管理员提供的信息,将用户信息存储到数据库中。1.2权限分配接口:PUT/api/users/{userID}/permissions功能:管理员可以通过指定用......
  • 架构设计【高可用】
    一、简介    高可用,即同一时刻系统能处理多少请求。二、提高系统性能    首先该想到的是如何发挥单个服务器潜能,再考虑堆服务器。    2.1、如何知道单台服务器性能瓶颈        性能的衡量指标,在业界通常指的是响应时间或者吞吐量,但是......
  • 软件架构设计师需要记住的内容
    第一章系统工程与信息系统基础1软件开发方法(1)结构化开发特点:用户至上,自顶而下,逐步分解,严格区分工作阶段,每阶段都有任务和结果,强调系统开发过程的整体性和全局性,系统开发过程工程化,资料文档标准化。优点:理论基础严密,它的指导思想是在用户需求在系统建立之前就能被充分了解和理......
  • Unity战斗单元UI血条架构设计
    1:如何选取技术方案 Unity战斗系统中,每个角色经常会有血条与昵称。如何架构设计才高效,我们列举一些常用的做法:(1)onGUI来做昵称与血条;(2)3D世界中创建一个3D物体来做血条与昵称,然后让血条与昵称对着摄像机;(3)基于UGUI/NGUI单独做血条与昵称的UI节点,然后把UI节点位置......
  • 接入层高可用架构设计:EdgeOne实战
    1. 背景接触多家客户后,发现大家的接入层架构大都如下图所示,WAF/DDoS组件客户要么选其中之一,要么都不选或自荐。CLB后面挂CVM,CVM上面部署Nginx或者Kong等组件。从这个架构图可以看出,客户有考虑高可用,但仅关注自己的组件层面,没有关注外部基础设施(如DNS)、政策法规的影响、运营商......
  • ABC209E Shiritori 题解
    ABC209EShiritori题解原题:洛谷AT_abc209_e分析博弈,可重复选,一眼图论,将每个单词的前三个字符向后三个字符连边,并用后三个字符代表这个单词。看一下样例。5eaaaabaa12eaaaacaa13daaaaaaa45eaaaadaa14daaaafaa46我们得到的有向图:当一方说完......
  • ZEGO音视频服务的高可用架构设计与运营
      前言:ZEGO即构科技作为一家实时音视频的提供商,系统稳定性直接影响用户的主观体验,如何保障服务高可用且用户体验最优是行业面临的挑战,本文结合实际业务场景进行思考,介绍 ZEGO即构在高可用架构和运营上所进行的探索和实践,希望对大家能有所帮助或启发。一、背景与挑战全......