web框架:Iris快速入门

news2024/11/25 10:04:35

web框架:Iris快速入门

1 介绍及安装

  1. 介绍
  • Iris是一款用Go开发的web应用框架,被称为速度最快的Go后端开发框架。
  • 官网地址:https://www.iris-go.com/
  • 中文教程地址:http://www.codebaoku.com/iris/iris-index.html
  1. 安装

环境要求:iris 框架要求 golang 版本至少为1.8。可以通过打开终端,执行:go version 命令来查看自己机器的go环境版本。

安装 iris 框架非常简单,使用 go 语言的全局安装第三方代码的命令 get 即可。

go get -u github.com/kataras/iris
  1. 启动一个简单的iris服务
package main

import "github.com/kataras/iris"

func main() {
	//1. 创建app结构体对象
	app := iris.New()
	//2. 端口监听
	app.Run(iris.Addr(":8082"))
}

bug:Assets undefined (type *blocks.Blocks has no field or method Assets)

  • 解决办法:
  1. 根据对应路径删除kataras目录
  2. 在对应路径下执行go mod init
  3. 重新下载指定版本
go get github.com/kataras/iris/v12@latest
// 或者
go get github.com/kataras/iris/v12@master

2 RESTFul风格、请求参数、响应处理

2.1 RESTFul风格【GET、POST…】

  • HTTP1.0定义了三种请求方法:GET、POST、HEAD
  • HTTP1.1新增了五种方法:OPTIONS、PUT、DELETE、TRACE、CONNECT
    因此,目前HTTP一共定义了八种方法对应不同的资源操作方式
package main

import (
	"github.com/kataras/iris/v12"
	_ "github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/context"
	"net/http"
)

func main() {
	//创建实例
	app := iris.New()
	//RESTFul请求方式
	//1. GET
	app.Get("/user", func(context *context.Context) {
		path := context.Path()
		app.Logger().Info(path)
		context.JSON(map[string]interface{}{
			"code": http.StatusOK,
			"msg":  "处理get请求成功,查询用户信息",
		})
	})

	//2. 处理POST
	app.Post("/user", func(context *context.Context) {
		path := context.Path()
		context.WriteString("处理POST请求成功,请求路径:" + path)
	})

	//3. 其他请求方式同理

	//监听端口
	app.Run(iris.Addr(":8082"))
}

  • GET:
    在这里插入图片描述
  • POST结果:
    在这里插入图片描述

2.2 请求参数处理

package main

import (
	"github.com/kataras/iris/v12"
	_ "github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/context"
)

func main() {
	//创建实例
	app := iris.New()
	//请求参数处理
	//1. param 		//localhost:8082/testParam?username=zhangsan&password=123
	app.Get("/testParam", func(context *context.Context) {
		username := context.URLParam("username")
		password := context.URLParam("password")
		//返回html数据格式
		context.HTML("<h1>" + username + "," + password + "</h1>")
	})

	//2. PathVariable	//localhost:8082/testPathVariable/wangwu/13
	//app.Get("/testPathVariable/{username:string}/{age:int}") //限定请求参数类型 username:string 、 age:int
	app.Get("/testPathVariable/{username}/{password}", func(context *context.Context) {
		username := context.Params().Get("username")
		password := context.Params().Get("password")
		context.WriteString("响应成功:" + username + "," + password)
	})

	//3. form表单
	app.Post("/testForm", func(context *context.Context) {
		username := context.PostValue("username")
		pwd := context.PostValue("password")
		context.WriteString("接收表单数据成功:" + username + "," + pwd)
	})

	//4. JSON数据
	app.Post("/testJson", func(context *context.Context) {
		var person Person
		if err := context.ReadJSON(&person); err != nil {
			panic(err.Error())
		}
		context.Writef("接收JSON数据成功:%v", person)
	})

	//5. XMl格式数据
	app.Post("/testXML", func(context *context.Context) {
		var stu Student
		if err := context.ReadXML(&stu); err != nil {
			panic(err.Error())
		}
		context.Writef("接收XML数据成功:%v", stu)
	})

	//监听端口
	app.Run(iris.Addr(":8082"))
}

// 用于解析JSON
type Person struct {
	//字段需要是大写,否则为私有,底层无法设置值
	Name string `json:name`
	Pwd  string `json:pwd`
}

// 用于解析XML
type Student struct {
	Name string `xml:stu_name`
	Age  int    `xml:stu_age`
}
  • form表单:
    在这里插入图片描述
  • JSON数据:
    在这里插入图片描述

2.3 响应结果处理

package main

import (
	"github.com/kataras/iris/v12"
	_ "github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/context"
)

func main() {
	//创建实例
	app := iris.New()
	//响应参数处理
	//1. 返回HTML数据
	app.Get("/getHtml", func(context *context.Context) {
		context.HTML("<h1> 返回HTML数据成功</h1>")
	})

	//2. 返回json数据
	app.Get("/getJson", func(context *context.Context) {
		context.JSON(iris.Map{"code": 200, "msg": "返回json数据成功"})
	})

	//3. 返回XMl数据
	app.Get("/getXMl", func(context *context.Context) {
		context.XML(Student{StuName: "jackson", StuAge: 25})
	})

	//4. 返回string类型
	app.Get("/getString", func(context *context.Context) {
		context.WriteString("返回string类型数据成功")
	})

	//监听端口
	app.Run(iris.Addr(":8082"))
}

// 用于解析JSON
type Person struct {
	//字段需要是大写,否则为私有,底层无法设置值
	Name string `json:name`
	Pwd  string `json:pwd`
}

// 用于解析XML
type Student struct {
	StuName string `xml:stu_name`
	StuAge  int    `xml:stu_age`
}
  • 返回XML格式数据
    在这里插入图片描述

3 路由功能

package main

import (
	"github.com/kataras/iris/v12"
	_ "github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/context"
)

func main() {
	//创建实例
	app := iris.New()
	//路由功能
	//1. handle方式处理请求 [method:GET、POST等都行]
	app.Handle("GET", "/userinfo", func(context *context.Context) {
		context.WriteString("handle方式处理请求成功...")
	})

	//2. 自定义表达式获取路由
	app.Get("/api/users/{userid:uint64}", func(context *context.Context) {
		userId, err := context.Params().GetUint("userid")
		if err != nil {
			context.JSON(iris.Map{
				"code": 201,
				"msg":"bad request",
			})
		}
		context.Writef("处理请求成功:%v", userId)
	})
	
	//3. 路由组
	userParty := app.Party("/users", func(context *context.Context) {
		//处理下一级请求
		context.Next()
	})
	// URL:  localhost:8082/users/login
	userParty.Get("/login", func(context *context.Context) {
		context.Writef("处理登录请求成功,请求路径:%v", context.Path())
	})

	
	goodsParty := app.Party("/goods", userMiddleware)
	goodsParty.Post("/add", func(context *context.Context) {
		context.WriteString("添加商品成功..." + context.Path())
	})
	
	//监听端口
	app.Run(iris.Addr(":8082"))
}

//用户路由中间件【拦截器】
func userMiddleware(context iris.Context)  {
	context.Next()
}

在这里插入图片描述

4 iris配置处理(读取配置文件)

package main

import (
	"github.com/kataras/iris/v12"
)

func main() {
	app := iris.New()
	//1. 通过代码进行全局配置
	app.Configure(iris.WithConfiguration(iris.Configuration{
		//如果设置为true,当人为中断程序执行之,则不会自动正常将服务器关闭,如果设置为false,需要自己自定义处理
		DisableInterruptHandler: false,
		//是否路由重定向,默认为false
		DisablePathCorrection: false,
		EnablePathEscape: false,
		FireMethodNotAllowed: false,
		DisableBodyConsumptionOnUnmarshal: false,
		DisableAutoFireStatusCode: false,
		TimeFormat: "Mon,02 Jan 2006 15:04:05 GMT",
		Charset: "utf-8",
	}))
	
	//2. 通过配置文件读取【需要在run方法之前执行】
	//toml
	app.Configure(iris.WithConfiguration(iris.TOML("/Users/iris/configs/iris.toml")))
	//yml
	app.Configure(iris.WithConfiguration(iris.TOML("/Users/iris/configs/iris.yml")))
	//json
	app.Configure(iris.WithConfiguration(iris.TOML("/Users/iris/configs/iris.json")))
	
	app.Run(iris.Addr(":8082"))
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/529928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QTableView编程——Model/View架构(单元格随意拖拽交换)

QTableView编程——Model/View架构 基础知识 添加表头 //准备数据模型QStandardItemModel *student_model new QStandardItemModel();student_model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("Name")));student_model->setHorizontalHea…

【Redis】Redis位图(bitmap)介绍和在签到场景的应用

文章目录 一、前言二、redis位图相关指令setbit命令getbit命令bitcount命令bitfield命令bitpos命令bitop命令 三、应用场景累计签到应用场景连续签到应用场景日期签到场景应用详情 一、前言 基本原理&#xff1a; 《Redis设计与实现》中对位图的实现描述是&#xff1a;Redis使…

做软件测试我该如何快速摸清一家公司的基本情况?

当你准备进入一家新的公司作为软件测试人员时&#xff0c;了解公司的基本情况对于你快速适应新环境和工作非常重要。下面是几个方面可以帮助你快速摸清一家公司的基本情况&#xff1a; 如果你想学习软件测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站…

8. 高性能业务表结构设计和索引知识深化

MySQL性能调优 1. 数据库表设计1.1 范式化设计1.1.1 什么是范式&#xff1f;1.1.2 第一范式&#xff08;1NF&#xff09;1.1.2 第二范式&#xff08;2NF&#xff09;1.1.3 第三范式&#xff08;3NF&#xff09; 1.2 反范式设计1.2.1 什么叫反范式化设计 1.3 范式化和反范式总结…

分析SpringBoot 底层机制【Tomcat 启动分析+Spring 容器初始化+Tomcat 如何关联Spring 容器之源码分析

目录 分析SpringBoot 底层机制【Tomcat 启动分析Spring 容器初始化Tomcat 如何关联Spring 容器之源码分析 搭建SpringBoot 底层机制开发环境 创建Maven 项目wyx-springboot 修改pom.xml , 导入相关依赖 创建MainApp.java 启动项目ok, 大家注意Tomcat 也启动了[这里思考, …

机器学习期末复习 BP神经网络的推导,4X4X3,激活函数变为Logistic函数,其他不变

刚写完了bp神经网络的实验课代码&#xff0c;对这个比较熟悉&#xff08;后面给出实现代码&#xff09; Logistic函数也就是sigmod函数&#xff0c;表达式是这样的&#xff1a; def sigmod(x):return 1/(1math.exp(-x)) sigmod函数是隐层和输出层的激活函数&#xff08;sigmo…

如何本地搭建Plex私人影音云盘教程,实现Plex家庭影音中心,打造超级多媒体中心

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDN远程穿透的文章&#xff1a;免费搭建Plex家庭影音中心 - 打造超级多媒体中心【公网远程访问…

WEBPACK、VITE 常用配置(对照)及迁移指南

文中 Webpack 版本为 5.x&#xff0c;Vite 版本为 4.3.x webpack 是新一代构建工具里面的老大哥了&#xff0c;从 2013 年发布已经持续升级 10 年&#xff0c;形成完备的生态环境。vite 则是下一代前端开发与构建工具&#xff0c;2019年发布&#xff0c;最新发布版本 4.3.3&…

文件操作安全之-文件上传告警运营篇

本文从文件上传的定义&#xff0c;文件上传的IDS规则&#xff0c;文件上传的示例&#xff0c;文件上传的告警研判&#xff0c;文件上传的处置建议等几个方面阐述如何通过文件上传类型的告警的线索&#xff0c;开展日常安全运营工作&#xff0c;从而挖掘有意义的安全事件。 文件…

rtl仿真器-iverilog icarus安装和测试

Icarus Verilog是一个轻量、免费、开源的Verilog编译器&#xff0c;基于C实现&#xff0c;开发者是 Stephen Williams &#xff0c;遵循 GNU GPL license 许可证&#xff0c;安装文件中已经包含 GTKWave支持Verilog/VHDL文件的编译和仿真&#xff0c;命令行操作方式&#xff0c…

C语言函数大全-- _w 开头的函数(1)

C语言函数大全 本篇介绍C语言函数大全-- _w 开头的函数 1. _waccess 1.1 函数说明 函数声明函数功能int _waccess(const wchar_t* path, int mode);用于测试文件或目录是否存在&#xff0c;并检查程序是否具有对它们的访问权限 参数&#xff1a; path &#xff1a; 待测试的…

Elasticsearch(三)

Elasticsearch(三) 数据聚合 聚合的分类 文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html 聚合可以实现对文档数据的统计、分析、运算。聚合常见的有三类&#xff1a; 桶聚合&#xff1a;用来对文档做分组 Te…

【P22】JMeter 调试后置处理程序(Debug PostProcessor)

&#xff08;1&#xff09;、测试计划右键 <<< 添加 <<< 线程&#xff08;用户&#xff09;<<< 线程组 默认参数即可 &#xff08;2&#xff09;、线程组右键 <<< 添加 <<< 取样器 <<< 调试取样器 默认参数即可 &…

SQL复习(一)——安装

1 mysql卸载 reference&#xff1a;https://blog.csdn.net/m0_67392273/article/details/126066580 Step1:停止MySql服务 在卸载之前&#xff0c;先停止MySQL8.0的服务 搜索“服务”&#xff0c;找到“MySQL”&#xff0c;右键点击选择“停止” Step2&#xff1a;软件的卸…

Unittest自动化测试之unittestunittest_生成测试报告

unittest_生成测试报告 测试报告为测试结果的统计即展示&#xff0c;是自动化测试不可或缺的一部分&#xff0c;利用unittest 可以生成测试报告 方式一、使用第三方 HTMLTestRunner 执行测试用例集&#xff0c;生成网页版测试报告&#xff08;推荐&#xff09; HTMLTestRunn…

5年软测经验去面试25k测试岗,看到这样的面试题我还是心虚了....

我是着急忙慌的准备简历——5年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程...薪资要求&#xff1f;5年测试经验起码能要个25K吧 我加班肝了一页半简历&#xff0c;投出去一周&#xff0c;面试电话倒是不少&#xff0c;自信满满去面试&#…

系统掌握入河排污口设置论证技术、方法及报告编制框架

在短时间内较系统的掌握入河排污口设置论证技术、方法及报告编制框架&#xff0c;学习内容以城镇生活污水厂、造纸项目、石化项目、制药项目案例为线索&#xff0c;系统讲解入河排污口设置论证报告书编制过程&#xff0c;并以水质模型为手段&#xff0c;讲解水质影响预测模型的…

Voice Control for ChatGPT 沉浸式的与ChatGPT进行交流学习。

Voice Control for ChatGPT 日常生活中&#xff0c;我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的&#xff0c;毕竟相对于文字来说语音就不会显的那么的苍白无力&#xff0c;同时最大的好处就是能解放我们的双手吧&#xff0c;能更快实现两者间的对话&#xff0c;沟通…

华为OD机试真题 Java 实现【简单的自动曝光】【2023Q1 100分】

一、题目描述 一个图像有 n 个像素点&#xff0c;存储在一个长度为 n 的数组 img 里&#xff0c;每个像素点的取值范围[0,255]的正整数。 请你给图像每个像素点值加上一个整k(可以是负数)&#xff0c;得到新图 newlmg&#xff0c;使得新图 newlmg 的所有像素平均值最接近中位…