go lris框架学习笔记

go语言除了原生http web框架,还有3个比较出名的框架,gin,beego,Iris

先创建项目
在这里插入图片描述

创建go.mod文件,管理各种包
在这里插入图片描述
打开命令行,下载iris包,go get github.com/kataras/iris/v12@master
记得配置goproxy,防止下载失败

成功创建项目demo1
写入以下代码运行后,浏览器可以正常访问。

package main

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

func main() {
	app := iris.New()         //开启iris http服务
	app.Use(iris.Compression) //iris.Compression 是Iris内部对IO数据进行压缩的模块,可以提高数据传输速度。

	app.Get("/", func(ctx iris.Context) {
		ctx.HTML("Hello <strong>%s</strong>!", "World")
	})

	app.Listen(":8080") //监听端口
}

Restful规范

定义一种接口的设计规范,但并不是必须用这个规范,根据实际场景来,不要墨守成规
在这里插入图片描述

表单传参

app.Post("/user/login", func(c *context.Context) {
		//获取表单的参数
		username := c.PostValue("username")
		password := c.PostValue("password")
		//控制台输出的日志
		app.Logger().Info(username + "--" + password)
		//对浏览器响应的内容
		c.WriteString(username + "--" + password)

	})

路径传参带key

app.Get("/user", func(context *context.Context) {
		userId := context.URLParam("userId")
		userName := context.URLParam("userName")
		app.Logger().Info(userId + "--" + userName)
		context.WriteString(userId + "--" + userName)
	})

路径传参不带key

//路径传参
	app.Get("/user/{userid:int64}/{username:string}", func(context *context.Context) {
		userid := context.Params().Get("userid")
		username := context.Params().Get("username")
		app.Logger().Info(userid + "--" + username)
		context.WriteString(userid + "--" + username)

	})

传递json

app.Post("user/json", func(context *context.Context) {
		//创建结构体,映射json字段,此处用匿名的,减少内存损耗,不匿名也可以
		var user1 = struct {
			Username string `json:"username"`
			Password string `json:"password"`
		}{}
		//读json赋值给user
		err := context.ReadJSON(&user1)
		if err != nil {
			panic(err)
		}
		app.Logger().Info(user1)
		//返回给浏览器json,iris.map是一个转换json的方法
		context.JSON(iris.Map{"msg": user1.Username, "code": 200})

	})

路由组

类似前缀,关键词Party,并且可以写方法,类似init
在这里插入图片描述

页面跳转

目录结构如下
在这里插入图片描述
代码如下:

package main

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

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

	//页面渲染配置,从./view目录下加载扩展名是.html的所有模板,将reload设置为true可以热更新前端页面
	app.RegisterView(iris.HTML("./view", ".html").Reload(true))
	//静态资源目录设置
	app.HandleDir("static", http.Dir("./static"))

	app.Get("/index", func(context *context.Context) {
		context.ViewData("msg", "hello,dada")
		context.View("index.html")
	})

	app.Run(iris.Addr(":8080"))
}

错误页面响应

	//如果报404的处理逻辑
	app.OnErrorCode(iris.StatusNotFound, func(context *context.Context) {
		context.View("404.html")
	})

重定向

进入/index,如果login为false就重定向到login

	app.Get("/index", func(context *context.Context) {
		context.ViewData("msg", "hello,dada")
		login := false
		if login {
			fmt.Println("xxx")
		} else {
			//设置重定向状态码302给context
			context.StatusCode(302)
			//设置重定向的地址,location为/login
			context.Header("location", "/login")
		}
	})
	app.Get("/login", func(context *context.Context) {

		context.View("login.html")
	})

中间件

在这里插入图片描述

访问user之前或之后的操作,也可以指定为全局

package main

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

func main() {
	app := iris.New()
	app.Use(iris.Compression)
	//全局的前置处理
	app.Use(befer)
	//全局的后置处理
	app.Use(after)
	app.Get("/user", user)

	//app.Get("/user",befer,user,after)  只针对user的前置,后置处理

	app.Listen(":8080")

}

func user(c *context.Context) {
	fmt.Println("user")
	c.Next()
}

func befer(c *context.Context) {
	c.Values().Set("msg", "hellodada")
	fmt.Println("befer")
	//继续到下一个处理器,不写的话,不会到下一个
	c.Next()
}

func after(c *context.Context) {

	fmt.Println("after")
	fmt.Println(c.Values().Get("msg"))
	c.Next()
}

会话

在这里插入图片描述

以下代码模拟会话,用户登录后,服务端给客户端一个cookie,并且服务端有一个session,验证通过后,可以正常登录首页,可以通过注销或者消除会话方法进行退出。

package main

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

// 创建会话
var (
	cookie  = "sessonididid"
	session = sessions.New(sessions.Config{Cookie: cookie})
)

func main() {

	app := iris.New()
	app.Use(iris.Compression)

	app.Get("/index", index)
	app.Get("/login", login)
	app.Get("/logout", logout)
	app.Get("/destroy", destroy)

	app.Listen(":8080")
}

// 登录验证
func login(c *context.Context) {
	//将c与seesion建立连接
	sessions := session.Start(c)
	//身份验证逻辑判断

	//验证通过,给session赋值,true
	sessions.Set("authenticated", true)
}

// 首页
func index(context *context.Context) {
	sessions := session.Start(context)
	//检查是否通过登录验证
	boolean, _ := sessions.GetBoolean("authenticated")

	if boolean == false {
		//响应302
		context.StatusCode(iris.StatusForbidden)
		return
	}
	context.WriteString("用户已经通过验证")

}

// 销毁会话
func destroy(c *context.Context) {
	//类似close,也可以起到注销的效果
	session.Destroy(c)
}

// 注销
func logout(c *context.Context) {
	sessions := session.Start(c)
	//将存的authenticated改为false
	sessions.Set("authenticated", false)

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tigeraowu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值