安装irisgo get github.com/kataras/iris

实例

注册一个route到服务的APIapp := iris.New()

app.Handle("GET", "/ping", func(ctx iris.Context) {

ctx.JSON(iris.Map{"message": "pong"})

})

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

几行代码就可以实现,通过浏览器访问http://localhost:8080/ping会返回{"message":"pong"}

使用Handle函数可以注册方法,路径和对应的处理函数

添加middleware

如果我们希望记录下所有的请求的log信息还希望在调用相应的route时确认请求的UA是否是我们允许的可以通过Use函数添加相应的middlewarepackage main

import (

"github.com/kataras/iris"

"github.com/kataras/iris/middleware/logger"

)

func main() {

app := iris.New()

app.Use(logger.New())

app.Use(checkAgentMiddleware)

app.Handle("GET", "/ping", func(ctx iris.Context) {

ctx.JSON(iris.Map{"message": "pong"})

})

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

}

func checkAgentMiddleware(ctx iris.Context) {

ctx.Application().Logger().Infof("Runs before %s", ctx.Path())

user_agent := ctx.GetHeader("User-Agent")

if user_agent != "pingAuthorized" {

ctx.JSON("No authorized for ping")

return

}

ctx.Next()

}

使用postman访问在Header中添加User-Agent访问/ping可以正常返回结果,如果去掉User-Agent则会返回我们设定的"No authorized for ping"。因为我们添加了iris的log middleware所以在访问时会在终端显示相应的log信息

取得请求参数,展示到html

bookinfo.html

{{ .bookName }}

{{ .bookID }}

{{ .author }}

{{ .chapterCount }}

main.gopackage main

import "github.com/kataras/iris"

func main() {

app := iris.New()

app.RegisterView(iris.HTML("./views", ".html"))

app.Handle("GET", "/bookinfo/{bookid:string}", func(ctx iris.Context) {

bookID := ctx.Params().GetString("bookid")

ctx.ViewData("bookName", "Master iris")

ctx.ViewData("bookID", bookID)

ctx.ViewData("author", "Iris expert")

ctx.ViewData("chapterCount", "40")

ctx.View("bookinfo.html")

})

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

}

取得请求中带的参数

ctx.Params().GetString("bookid")

设置html中变量的值

ctx.ViewData(key, value)

route允许和禁止外部访问

实际使用中有时会有些route只能内部使用,对外访问不到。

可以通过使用 XXX_route.Method = iris.MethodNone设定为offline

内部调用通过使用函数 Context.Exec("NONE", "/XXX_yourroute")

main.gopackage main

import "github.com/kataras/iris"

import "strings"

func main() {

app := iris.New()

magicAPI := app.Handle("NONE", "/magicapi", func(ctx iris.Context) {

if ctx.GetCurrentRoute().IsOnline() {

ctx.Writef("I'm back!")

} else {

ctx.Writef("I'll be back")

}

})

app.Handle("GET", "/onoffhandler/{method:string}/{state:string}", func(ctx iris.Context) {

changeMethod := ctx.Params().GetString("method")

state := ctx.Params().GetString("state")

if changeMethod == "" || state == "" {

return

}

if strings.Index(magicAPI.Path, changeMethod) == 1 {

settingState := strings.ToLower(state)

if settingState == "on" || settingState == "off" {

if strings.ToLower(state) == "on" && !magicAPI.IsOnline() {

magicAPI.Method = iris.MethodGet

} else if strings.ToLower(state) == "off" && magicAPI.IsOnline() {

magicAPI.Method = iris.MethodNone

}

app.RefreshRouter()

ctx.Writef("\n Changed magicapi to %s\n", state)

} else {

ctx.Writef("\n Setting state incorrect(\"on\" or \"off\") \n")

}

}

})

app.Handle("GET", "/execmagicapi", func(ctx iris.Context) {

ctx.Values().Set("from", "/execmagicapi")

if !magicAPI.IsOnline() {

ctx.Exec("NONE", "/magicapi")

} else {

ctx.Exec("GET", "/magicapi")

}

})

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

}

测试:

<1>访问http://localhost:8080/magicapi,返回Not found。说明route magicapi对外无法访问

<2>访问http://localhost:8080/execmagicapi,返回I'll be back。在execmagicapi处理函数中会执行 ctx.Exec("GET", "/magicapi")调用offline的route magicapi。在magicapi中会判断自己是否offline,如果为offline则返回I'll be back。

<3>访问http://localhost:8080/onoffhandler/magicapi/on改变magicapi为online

<4>再次访问http://localhost:8080/magicapi,返回I'm back!。说明route /mabicapi已经可以对外访问了

grouping route

在实际应用中会根据实际功能进行route的分类,例如users,books,community等。

/users/getuserdetail

/users/getusercharges

/users/getuserhistory

/books/bookinfo

/books/chapterlist

对于这类route可以把他们划分在users的group和books的group。对该group会有共通的handler处理共同的一些处理package main

import (

"time"

"github.com/kataras/iris"

"github.com/kataras/iris/middleware/basicauth"

)

func bookInfoHandler(ctx iris.Context) {

ctx.HTML("

Calling bookInfoHandler

")

ctx.HTML("
bookID:" + ctx.Params().Get("bookID"))

ctx.Next()

}

func chapterListHandler(ctx iris.Context) {

ctx.HTML("

Calling chapterListHandler

")

ctx.HTML("
bookID:" + ctx.Params().Get("bookID"))

ctx.Next()

}

func main() {

app := iris.New()

authConfig := basicauth.Config{

Users: map[string]string{"bookuser": "testabc123"},

Realm: "Authorization required",

Expires: time.Duration(30) * time.Minute,

}

authentication := basicauth.New(authConfig)

books := app.Party("/books", authentication)

books.Get("/{bookID:string}/bookinfo", bookInfoHandler)

books.Get("/chapterlist/{bookID:string}", chapterListHandler)

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

}

上例中使用了basicauth。对所有访问books group的routes都会先做auth认证。认证方式是username和password。

在postman中访问 http://localhost:8080/books/sfsg3234/bookinfo

设定Authorization为Basic Auth,Username和Password设定为程序中的值,访问会正确回复。否则会回复Unauthorized

有疑问加站长微信联系(非本文作者)

golang iris mysql_golang iris使用相关推荐

  1. 【golang】golang初始化项目(iris下载与使用)

    1.初始化过程 1.1 进入iris官网 iris官网 //iris中文网 iris中文网 1.2 开启go module set GO111MODULE=on //windows export GO ...

  2. 【GO+Iris】Iris框架初识

    前言 关于Iris 安装Iris Host HTTP/2和安全 任意iris.Runner host配置 多个主机 优雅的关闭 带有TLS地自动公共域名 app.Run的第二个参数 使用配置 自定义值 ...

  3. InterSystems IRIS 和 IRIS for Health 2021.2 预览版发布

    InterSystems IRIS.IRIS for Health 以及 HealthShare Health Connect 的 2021.2 版本的预览版现已发布. 由于这是一个预览版,我们希望在 ...

  4. InterSystems IRIS、IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现在已经发布!...

    由于这是一个预览版,我们渴望在下个月的通用版发布之前了解您对这个新版本的经验.请通过开发者社区分享您的反馈,以便我们能够共同打造一个更好的产品.预览版,我们渴望在下个月的通用版发布之前了解您对这个新版 ...

  5. InterSystems IRIS、IRIS for Health和Health Connect 2021.1预览版现已发布

    InterSystems IRIS.IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现已发布. 由于这是一个预览版,我们希望在下个月的通用 ...

  6. golang后台管理系统Iris+Layui框架搭建教程

    项目介绍 一款 Go 语言基于Iris.Layui.MySQL等框架精心打造的一款模块化.高性能.企业级的敏捷开发框架,本着简化开发.提升开发效率的初衷触发,框架自研了一套个性化的组件,实现了可插拔的 ...

  7. 【Golang】安装 iris 的方法

    根据 iris 在 github 上的官方文档,结合自己在安装时的过程,现在总结一下 iris 的安装方法. 1. 创建工作目录 mkdir myapp 2. 进入工作目录 cd myapp 3. 初 ...

  8. InterSystems IRIS 和 IRIS for Health 2021.2 正式发布!

    InterSystems 数据平台团队非常高兴地宣布,InterSystems IRIS数据平台.InterSystems IRIS for Health和HealthShare Health Con ...

  9. iris文件服务器,iris 网络

    iris 网络 内容精选 换一换 学件项目中预置了样例数据,因此<学件开发指南>使用预置样例数据,讲解学件的操作流程.如果用户需要使用自己的数据,可以参考新建数据集和导入数据,创建新的数据 ...

最新文章

  1. 推荐系统算法工程师培养计划:博导级教研团队,原理教学、项目实践、大厂内推的一站式培训...
  2. React性能优化 PureComponent
  3. Linux运维系统工程师与java基础学习系列-6
  4. Android--使用VideoView播放视频
  5. 该文件没有与之关联的程序来执行该操作_Liunx tty子系统分析之三 tty字符设备文件操作接口说明...
  6. 电子计算机的基本结构基于存储程序思想是由,计算机应用基础第一章复习题
  7. Eclipse 中最常用的快捷键大全
  8. 计算机毕业设计ssm电影院售票系统java项目mysql数据库
  9. 计算机 控制面板都打不开怎么办,控制面板打不开怎么办?控制面板打开办法大全...
  10. ThreadLocal的介绍与使用
  11. Flashpaper序列号(Flashpaperamp;nbs…
  12. 环境变量(PATH)的那些事
  13. live2d_Live2D解锁丨SR羁绊复刻,生日定制服装上架!
  14. 微信小程序开发:Java后台MySQL数据库微信小程序页面
  15. 戴尔服务器虚拟 介质,使用Dell R710 IDRAC挂载虚拟介质
  16. 软考准备之系统开发与运行(错题及重要知识点)
  17. jsp做的留言系统(防止非法登录、增删改查留言)
  18. java变量无法解析出现的原因_不明白为什么这个变量无法解析为一个类型? (JAVA)...
  19. 朗伯辐射强度模型MATLAB,基于室内非定向的可见光通信系统的朗伯光源阶数优化...
  20. V4L2框架-videobuf2

热门文章

  1. Vue 引入Ueditor修改样式仿照Word文档
  2. 2022-2028全球及中国监管技术(RegTech)行业研究及十四五规划分析报告
  3. Centos 服务器禁止 IP访问/ IP黑名单
  4. 大数据量数据库设计与优化方案
  5. 微信小程序(手机登录60S倒计时+微信登录页面+限制时间次数频率)
  6. x86android刺激战场,OPPO Find X 游戏实测:未来旗舰 实力强悍如斯
  7. Vue(动画、过渡、动画库)
  8. 直播推荐、搜索中的召回、相关性、多目标精排 - 相关性篇
  9. 中睿天下魏海宇受邀出席2022网络安全创新发展高峰论坛并发表主题演讲
  10. 同城跑腿系统搭建,灵活的配送选择满足更多场景