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

news2026/2/15 17:27:02

本文详细介绍了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'
}

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

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

相关文章

用户体验与SEO的结合:如何优化网站以提升谷歌排名?

在SEO领域&#xff0c;算法、关键词和技术手段固然重要&#xff0c;但归根结底&#xff0c;谷歌的核心理念是提供最优质的用户体验。无论算法如何变化&#xff0c;用户体验始终是影响谷歌排名的重要因素之一。一个友好、直观的网站不仅能留住用户&#xff0c;还能直接提升搜索引…

python总说的cd是什么

以下适用于windows环境 cd就是change directory的缩写&#xff0c;即改变目录。 讲cd命令之前&#xff0c;先来看看提示符是什么意思。现在的提示符是c:\> c:说明现在的工作盘是c盘&#xff0c;\告诉我们当前的工作目录是根目录。 >的作用是把工作目录和我们要输入的…

电感的基本概念

电感的定义&#xff1a; 电感一般是由导线绕成空芯线圈或带铁芯的线圈而制成。 当线圈中有电流通过时&#xff0c;线圈周围就会产生磁场&#xff0c;当线圈中流过的是直流电流时&#xff0c;线圆周围就会产生固定的磁场&#xff0c;线圈产生的物理现象就是电磁铁&#xff0c;当…

基于 mzt-biz-log 实现接口调用日志记录

&#x1f3af;导读&#xff1a;mzt-biz-log 是一个用于记录操作日志的通用组件&#xff0c;旨在追踪系统中“谁”在“何时”对“何事”执行了“何种操作”。该组件通过简单的注解配置&#xff0c;如 LogRecord&#xff0c;即可实现接口调用的日志记录&#xff0c;支持成功与失败…

芯片级IO (Pad) Ring IP Checklist

SoC top顶层数字后端实现都会涉及到IO Ring &#xff08;PAD Ring&#xff09;的设计。这里面包括VDD IO,VDDIO IO, Signal IO, Corner IO&#xff0c;Filler IO&#xff0c;IO power cut cell等等。 数字后端零基础入门系列 | Innovus零基础LAB学习Day2 数字IC后端实现TOP F…

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

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

一个日期范围选择框的设计

一个日期范围选择框的设计 一个日期范围选择框 这是一个日期范围选择框的设计&#xff0c;除了可以选择开始日期、结束日期之外。还要一些按钮用于快速选择日期范围&#xff1a; Today今天Yesterday昨天Today & Yesterday今天和昨天This month当月Last month上个月Last w…

【中标麒麟服务器操作系统实例分享】java应用DNS解析异常分析及处理

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 情况描述 中标麒麟服务器操作系统V7运行在 ARM虚…

React 第十七节 useMemo用法详解

概述 useMemo 是React 中的一个HOOK&#xff0c;用于根据依赖在每次渲染时候缓存计算结果&#xff1b; 大白话就是&#xff0c;只有依赖项发生变化时候&#xff0c;才会重新渲染为新计算的值&#xff0c;否则就还是取原来的值&#xff0c;有点类似 vue 中的 computed 计算属性…

景联文科技:精准语音标注,驱动语音技术新发展

在人工智能迅速发展的今天&#xff0c;语音技术的应用已经渗透到我们生活的方方面面。从智能音箱、语音助手到自动语音识别系统&#xff0c;高质量的语音数据是这些应用成功的关键。景联文科技作为领先的AI数据服务提供商&#xff0c;专注于为客户提供高精度、高效的语音标注服…

中文分词学习

1.安装 jieba 库 !pip install jieba jieba 库是用于中文分词的工具&#xff0c;它通过精确的分词算法来处理文本。通过分词可以将中文句子拆分成单独的词语&#xff0c;这对于自然语言处理任务非常重要&#xff0c;比如文本分类、情感分析、关键词提取。 2.中文文本分词处理…

Android 动画深度解析

一、Android 动画发展历程与核心类型总览 自 Android 诞生起&#xff0c;动画系统便不断推陈出新。早期存在补间动画&#xff08;Tween Animation&#xff09;与帧动画&#xff08;Frame Animation&#xff09;&#xff0c;而 Android 3.0 重磅引入属性动画&#xff08;Proper…

Linux-ubuntu之主频和时钟配置

Linux-ubuntu之主频和时钟配置 一&#xff0c;主频二&#xff0c;其它时钟配置1.PLL2和PLL3的PFD0-3设置2.AHB_CLK_ROOT3.IPG 和 PERCLK时钟 三&#xff0c;总结 一&#xff0c;主频 24MHz 晶振为内核和其它外设提供时钟源&#xff0c;经电路后到PLL1变为996MHZ&#xff0c;再…

Autosar入门_汽车电子控制器

上一篇 | 返回主目录 汽车电子控制器 1 汽车电子控制器定义2 从功能角度来看构成2.1 车门控制器简单示例2.1.1 解锁过程分析2.1.2 无框车窗短降2.1.3 下电控制电耗2.2 控制器几大基本功能 3 从硬件构成角度看构成3.1 芯片类别说明3.2 芯片与功能联系 1 汽车电子控制器定义 汽…

变压器“变压”和“变流”说明

变压器可以改变交流电压的大小&#xff0c;也可以改变交流电流的大小。 改变交流电压 变压器既可以升高交流电压&#xff0c;也能降低交流电压。在忽略电能损耗的情况下&#xff0c;变 压器电压U、二次电压U2与烧组匝数N、二次烧组匝数的关系为&#xff1a; n称为匝数比或电…

初学stm32 --- 时钟配置

目录 stm32时钟系统 时钟源 &#xff08;1&#xff09; 2 个外部时钟源&#xff1a; &#xff08;2&#xff09;2 个内部时钟源&#xff1a; 锁相环 PLL PLLXTPRE&#xff1a; HSE 分频器作为 PLL 输入 (HSE divider for PLL entry) PLLSRC&#xff1a; PLL 输入时钟源 (PL…

[机器学习]XGBoost(3)——确定树的结构

XGBoost的目标函数详见[机器学习]XGBoost&#xff08;2&#xff09;——目标函数&#xff08;公式详解&#xff09; 确定树的结构 之前在关于目标函数的计算中&#xff0c;均假设树的结构是确定的&#xff0c;但实际上&#xff0c;当划分条件不同时&#xff0c;叶子节点包含的…

常用命名总结

命名在编程中是非常重要的&#xff0c;它直接影响到代码的可读性、可维护性和开发效率。一个好的命名能够让代码更加直观、易于理解和修改&#xff0c;反之&#xff0c;不恰当的命名可能导致混乱、错误和难以调试的问题。以下是一些关于命名的最佳实践和原则&#xff1a; 1. 简…

AutoMQ 流表一体新特性 Table Topic 发布: 无缝集成 AWS S3 Table 和 Iceberg

超越共享存储&#xff1a;使用 Apache Iceberg 中的 AutoMQ Table Topic 实现流处理与分析的统一 自 2023 年底官宣以来&#xff0c;AutoMQ 成功地将 Apache Kafka 从“Shared Nothing architecture”转变为“Shared Storage architecture”&#xff0c;这为京东、知乎、小红书…

maven使用Dependency-Check来扫描安全漏洞

在现代软件开发中&#xff0c;使用开源库和第三方依赖项已成为常态。然而&#xff0c;这些依赖项可能包含已知的安全漏洞&#xff0c;给应用程序带来潜在的风险。为了解决这个问题&#xff0c;OWASP Dependency-Check 应运而生。本文将介绍 OWASP Dependency-Check 的功能、安装…