go语言学习005——iris框架学习

本文详细介绍了Go语言中Iris框架的使用,包括安装、基本HTTP请求(GET、POST等)的处理、自定义请求处理、用户组管理和配置设置。示例代码展示了如何创建路由、接收不同格式的请求参数、错误处理以及配置信息的动态加载。此外,还提到了路径参数和正则表达式的应用。

1、安装

go get -u github.com/kataras/iris

然后在gopath目录下,新建first_iris文件夹
新建文件main.go

package main

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

	"github.com/kataras/iris/v12/middleware/logger"
	"github.com/kataras/iris/v12/middleware/recover"
)

func main() {
	app := iris.New()
	app.Logger().SetLevel("debug")
	app.Use(recover.New())
	app.Use(logger.New())
	app.Get("/", func(ctx iris.Context) {
		ctx.HTML("Hello")
	})

	app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
}

之后go rum main.go
再浏览器localhost:8080访问

2、iris中的http8种请求

2.1、直接处理请求

package main

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

func main() {

	app := iris.New()
	//app.Get();  // 可以直接点出来8种获取网络资源的方法,
	//app.Put();

	app.Get("/getRequest", func(context iris.Context) {
		// 处理get请求,请求的url为:/getRequest
		path := context.Path()
		app.Logger().Info(path)
	})

	// 1、处理Get请求
	app.Get("/userpath", func(context iris.Context) {
		path := context.Path()
		app.Logger().Info(path)

		context.WriteString("请求路径 + " + path)
	})

	// 2、处理Get请求,并接受参数
	app.Get("/userinfo", func(context iris.Context) {
		path := context.Path()
		app.Logger().Info(path)

		// 获取get请求携带的参数
		userName := context.URLParam("username")
		app.Logger().Info(userName)

		pwd := context.URLParam("pwd")
		app.Logger().Info(pwd)

		// 返回html格式
		context.HTML("<h1>" + userName + "," + pwd + "</h1>")
	})

	// 2.2、返回json格式的数据
	app.Get("/getJson", func(context iris.Context) {
		context.JSON(iris.Map{"message": "hello world", "requestCode": 200})
	})

	// 3、处理Post请求,form表单的字段获取
	app.Post("/postLogin", func(context iris.Context) {
		path := context.Path()
		app.Logger().Info(path)

		// 使用context.PostValue来获取post请求所提交的form表单数据
		name := context.PostValue("name")
		pwd := context.PostValue("pwd")
		app.Logger().Info(name, " ", pwd)
		context.HTML(name)
	})

	// 4、处理json格式的post请求
	// postman的请求信息:{"name":"davie","age": 28}
	app.Post("/postJson", func(context iris.Context) {
		// 1、Path
		path := context.Path()
		app.Logger().Info("请求URL: ", path)

		// 2. Json解析
		var person Person
		if err := context.ReadJSON(&person); err != nil {
			panic(err.Error())
		}
		context.Writef("Received : %#+v\n", person)
	})

	// 5、处理post请求 xml格式
	// postman的请求信息:{"name":"davie","age": 28}
	app.Post("/postXml", func(context iris.Context) {

		//1.Path
		path := context.Path()
		app.Logger().Info("请求URL:", path)

		//2.XML数据解析
		var student Student
		if err := context.ReadXML(&student); err != nil {
			panic(err.Error())
		}
		//输出:
		context.Writef("Received:%#+v\n", student)
	})

	app.Run(iris.Addr(":8000"), iris.WithoutServerError(iris.ErrServerClosed))

}

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

//自定义的结构体
type Student struct {
	//XMLName xml.Name `xml:"student"`
	StuName string `xml:"stu_name"`
	StuAge  int    `xml:"stu_age"`
}

2.2、使用通用的handle方法自定义

编写自己的请求处理类型以及对应的方法
和正则表达式

package main

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

func main() {
	app := iris.New()

	// 第二种统一使用handle处理方式
	app.Handle("GET", "/userinfo", func(context context.Context) {
		path := context.Path()
		app.Logger().Info(path)
		app.Logger().Error("requext is: ", path)

		context.Writef("写回去")
	})

	app.Handle("POST", "/postcommit", func(context context.Context) {
		path := context.Path()
		app.Logger().Info("post request ,the url is :", path)
	})

	// 正则表达式,带参数的
	app.Get("/weather/{date}/{city}", func(context context.Context) {
		path := context.Path()
		date := context.Params().Get("date") // 获取自定义的变量
		city := context.Params().Get("city")
		context.WriteString(path + " , " + date + " , " + city)
	})

	// 正则表达式,带参数,且带参数的数据类型的
	app.Get("/api/users/{isLogin:bool}", func(context context.Context) {
		path := context.Path()
		isLogin, err := context.Params().GetBool("isLogin")
		if err != nil {
			context.StatusCode(iris.StatusNonAuthoritativeInfo)
		}
		if isLogin {
			context.WriteString("已登录")
		} else {
			context.WriteString("未登录")
		}
		context.Writef(path)
		//context.Params().Get  之后提示的信息,就是可以获取的数据类型
	})

	app.Run(iris.Addr(":8800"), iris.WithoutServerError(iris.ErrServerClosed))

}

2.3、用户组

先进入,user,
之后在选择登陆,还是而做其他的,
服务器端代码是前缀匹配,如果遇到了user,就跳转到user的组中,再接着做其他的相关的事情

	//app := iris.New()
		//userParty
		//userparty := user.Party() 用户组
		//users.Done(func(){})   执行完用户组之后,需要调用一下这个方法

2.4、配置信息

func main() {
	app := iris.New()

	// 1、代码直接配置
	app.Configure(iris.WithConfiguration(iris.Configuration{
		DisableInterruptHandle: false,
		EnablePathEscape: false,
		TimeRormat: "Mon,02 Jan 2006 15:04:05 GMT",
	}))

	// 2、读取tml配置文件读取服务的配置
	app.Configure(iris.WithConfiguration(iris.YAML("/Users/hongweiyu/go/src/irisDemo/004_handle_method/configs/iris.tml")))

	// 3、通过读取yaml配置文件
	app.Configure(iris.WithConfiguration(iris.YAML("("/Users/hongweiyu/go/src/irisDemo/004_handle_method/configs/iris.yml")))

	// 4、通过json配置文件
	file ,_ := os.Open("/User/hongweiyu/go/src/irisDemo/004_handle_method/config.json")
	defer file.Close()

	decoder := json.NewDecoder(file)
	conf := Coniguration{}
	err := decoder.Decode(&conf)
	fi err != nil {
		fmt.Println("error:",err)
	}
	fmt.Println(conf.Port)



type Coniguration struct {
	AppName string 'json:"appname'
	Port int 'json:"port'
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day-21 内核链表以及栈

1.昨日作业 1.删除指定节点 找到删除就完事了&#xff0c;双向可以停在删除处。 /***************************** 功能&#xff1a;删除指定结点&#xff08;通过姓名&#xff09;* 参数&#xff1a;phead&#xff1b;oldname; * 返回&#xff1a;成功0&#xff0c;失-1&…

深入剖析MyBatis的架构原理

架构设计 简要画出 MyBatis 的架构图 >> ​​ Mybatis 的功能架构分为哪三层&#xff1f; API 接口层 提供给外部使用的接口 API&#xff0c;开发人员通过这些本地 API 来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。MyBatis 和数据库的…

Figma插件:提高设计工作效率

Figma作为一款当前流行的设计工具&#xff0c;其受欢迎程度的飙升与2020年疫情后的远程工作趋势密切相关。许多设计团队开始转向线上办公模式&#xff0c;这时&#xff0c;Figma的协作功能就显得尤为重要&#xff0c;促使众多设计师从Sketch等传统设计软件转向Figma。 Figma是…

Hive其一,简介、体系结构和内嵌模式、本地模式的安装

目录 一、Hive简介 二、体系结构 三、安装 1、内嵌模式 2、测试内嵌模式 3、本地模式--最常使用的模式 一、Hive简介 Hive 是一个框架&#xff0c;可以通过编写sql的方式&#xff0c;自动的编译为MR任务的一个工具。 在这个世界上&#xff0c;会写SQL的人远远大于会写ja…

Qt之自定义标题栏拓展(十)

Qt开发 系列文章 - user-defined-titlebars&#xff08;十&#xff09; 目录 前言 一、方式一 1.效果演示 2.创建标题栏类 3.可视化UI设计 4.定义相关函数 5.使用标题栏类 二、方式二 1.效果演示 2.创建标题栏类 3.定义相关函数 1.初始化函数 2.功能函数 3.窗口关…

鱼跃医疗获评2024年国家级“绿色工厂”,以绿色制造树立行业标杆

近日&#xff0c;工业和信息化部公布了2024年度绿色制造名单&#xff0c;鱼跃医疗凭借在绿色制造和可持续发展方面的卓越表现&#xff0c;成功入选并获评国家级“绿色工厂”。 “绿色工厂”是工信部为贯彻落实国家《工业绿色发展规划》&#xff0c;加快推动绿色制造体系建设&a…

【数据集】玻璃门窗缺陷检测数据集3085张5类YIOLO+VOC格式

数据集格式&#xff1a;VOC格式YOLO格式 压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计&#xff1a;3085 Annotations文件夹中xml文件总计&#xff1a;3085 labels文件夹中txt文件总计&#xff1a;3085 标签种类数&am…

一、LRU缓存

LRU缓存 1.LRU缓存介绍2.LRU缓存实现3.LRU缓存总结3.1 LRU 缓存的应用3.2 LRU 缓存的优缺点 1.LRU缓存介绍 LRU是Least Recently Used 的缩写&#xff0c;意为“最近最少使用”。它是一种常见的缓存淘汰策略&#xff0c;用于在缓存容量有限时&#xff0c;决定哪些数据需要被删…

【视频生成模型】——Hunyuan-video 论文及代码讲解和实操

&#x1f52e;混元文生视频官网 | &#x1f31f;Github代码仓库 | &#x1f3ac; Demo 体验 | &#x1f4dd;技术报告 | &#x1f60d;Hugging Face 文章目录 论文详解基础介绍数据预处理 &#xff08;Data Pre-processing&#xff09;数据过滤 (Data Filtering)数据标注 (Data…

【C++】函数计算题解论

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;思路解析3.1 函数的递归定义3.2 边界条件控制3.3 记忆化搜索 &#x1f4af;C实现代码&#x1f4af;添加解释&#x1f4af;小结 &#x1f4af;前言 在…

低温高海拔大载重无人机吊运技术详解

低温高海拔大载重无人机吊运技术是一项复杂而先进的技术&#xff0c;它结合了无人机的飞行控制、吊装系统的操作以及特殊环境下的适应性等多个方面。以下是对该技术的详细解析&#xff1a; 一、无人机基础知识与结构特点 低温高海拔大载重无人机通常采用旋翼设计&#xff0c;…

Java设计模式 —— 【结构型模式】适配器模式(类的适配器、对象适配器、接口适配器)详解

文章目录 基本介绍一、类的适配器二、对象适配器三、接口适配器总结 基本介绍 生活中有很多例子&#xff1a; 不同国家的插座接口不同&#xff0c;需要转换器&#xff1b;家用电源220V&#xff0c;手机只接受5V充电&#xff0c;需要转换器&#xff1b;读卡器&#xff0c;拓展…

系列2:基于Centos-8.6Kubernetes 集成GPU资源信息

每日禅语 自省&#xff0c;就是自我反省、自我检查&#xff0c;自知己短&#xff0c;从而弥补短处、纠正过失。佛陀强调自觉觉他&#xff0c;强调以达到觉行圆满为修行的最高境界。要改正错误&#xff0c;除了虚心接受他人意见之外&#xff0c;还要不忘时时观照己身。自省自悟之…

leetcode17:电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "23" 输出&#…

OpenHarmony-3.HDF Display子系统(6)

Display 子系统 1.Display驱动模型介绍 当前操作系统和 SOC 种类繁多&#xff0c;各厂商的显示屏器件也各有不同&#xff0c;随之针对器件的驱动代码也不尽相同&#xff0c;往往是某一款器件驱动&#xff0c;只适用于某单一内核系统或 SOC&#xff0c;如果要迁移到其他内核或者…

AQS源码学习

一、park/unpark阻塞唤醒线程 LockSupport是JDK中用来实现线程阻塞和唤醒的工具。使用它可以在任何场合使线程阻塞&#xff0c;可以指定任何线程进行唤醒&#xff0c;并且不用担心阻塞和唤醒操作的顺序&#xff0c;但要注意连续多次唤醒的效果和一次唤醒是一样的。JDK并发包下…

GUI07-学工具栏,懂MVC

MVC模式&#xff0c;是天底下编写GUI程序最为经典、实效的一种软件架构模式。当一个人学完菜单栏、开始学习工具栏时&#xff0c;就是他的一生中&#xff0c;最适合开始认识 MVC 模式的好时机之一。这节将安排您学习&#xff1a; Model-View-Controller 模式如何创建工具栏以及…

C++----类与对象(中篇)

引言 以C语言栈的实现为例&#xff0c;在实际开发中&#xff0c;我们可能会遇到以下两个问题&#xff1a; 1.初始化和销毁管理不当&#xff1a;C语言中的栈实现通常需要手动管理内存&#xff08;如使用malloc和free&#xff09;&#xff0c;这导致初始化和销毁栈时容易出错或…

linux打包qt程序

Linux下Qt程序打包_linuxdeployqt下载-CSDN博客 Linux/Ubuntu arm64下使用linuxdeployqt打包Qt程序_linuxdeployqt arm-CSDN博客 本篇文章的系统环境是 : 虚拟机ubuntu18.04 用下面这个qmake路径 进行编译 在 ~/.bashrc 文件末尾&#xff0c;qmake目录配置到文件末尾 将上图中…

气象与旅游之间的关系,如果借助高精度预测提高旅游的质量

气象与旅游之间存在密切的关系,天气条件直接影响旅游者的出行决策、旅游体验和安全保障。通过高精度气象预测技术,可以有效提升旅游质量,为游客和旅游行业带来显著的优势。 1. 提高游客出行决策效率 个性化天气服务:基于高精度气象预测,旅游平台可以提供个性化的天气预报服…