目录
Iris框架
1. Iris简介
Go的web框架,只需一个可执行的服务就可以在多平台上运行了。支持MVC、构建微服务。被称为速度最快的Go后端开发框架。
- 高性能、静态路由支持和通配符子域名支持
- RESTFUL风格、视图模板丰富、定制事件和HTTP错误等
- 垃圾回收GC,、对内存和redis 提供支持、热部署等特点
Windows 安装设置下代理:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go get -u github.com/gin-gonic/gin
go get github.com/kataras/iris/
Linux 下安装代理
export GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go get -u github.com/gin-gonic/gin
go get github.com/kataras/iris/
实在安装有问题的直接GoLang里面import "github.com/kataras/iris" 用IDE来安装^_^
-------------2020.4.26-----------采坑总结
可以用环境变量 GO111MODULE 开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是 auto。
GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。
GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。
GO111MODULE=auto 在 $GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。
所以之前设置的go env -w GO111MODULE=on是使用了Go 1.11 之后官方支持的版本管理工具 mod
此时下载的文件啥的会保存在gopath下面的pkg/mod里面。
如果不想用mod工具,把它设置成关闭,然后直接go get -u XXX (但不*,大概率下不全得手动补全)
官网:https://iris-go.com/
源码:https://github.com/kataras/iris
文档: https://studyiris.com/doc/
项目的结构大概可以如下规划:
#公司项目
├─bin # 存放编译后的二进制文件
├─pkg # 存放编译后的库文件
└─src # 存放源代码文件
├─github.com
└─XXXtech.com # 网站域名 公司或GitHub
└─tomasonl# 机构/作者
├─project1 #项目一
│ ├─ moduleA #模块A
│ └─ moduleB #模块B
└─project2 #项目二
├─ moduleA #模块A
└─ moduleB #模块B
#个人项目
├─bin # 编译后的二进制文件
├─pkg # 编译后的库文件
└─src # 源代码文件
├─github.com
└─tomasonl.com # 网站域名 公司或GitHub
└─leo # 机构/作者
├─project1 #项目一
│ ├─ moduleA #模块A
│ └─ moduleB #模块B
└─project2 #项目二
├─ moduleA #模块A
└─ moduleB #模块B
2.Iris 实例Demo
package main
import "github.com/kataras/iris"
func main() {
//1.创建app结构体对象
app := iris.New()
//2.端口监听
app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
//app.Run(iris.Addr(":8080"))//第一种
//app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed)) //第二种
}
----------------------------------------------------------
$ go run example.go
Now listening on: http://localhost:8080
Application started. Press CTRL+C to shut down.
3.Get、Post、Put和Delete
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
//main方法
func main() {
app := iris.New()
//普通Get请求
app.Get("/getRequest",func(context context.Context){
path := context.Path()
app.Logger().Info(path)
context.WriteString("您的请求路径:"+path)
})
//Get请求携带信息
app.Get("/userinfo", func(context context.Context){
userName := context.URLParam("username")
pwd := context.URLParam("pwd")
context.HTML("用户名:"+userName+" 密码:"+pwd)
})
//Post请求-form表单的字段获取
app.Post("/postLogin", func(context context.Context) {
name := context.PostValue("name")
pwd := context.PostValue("pwd")
context.HTML("用户名:"+userName+" 密码:"+pwd)
})
//Post请求-Json格式数据
//Json内容:{"name": "leo","age": 18}
app.Post("/postJson", func(context context.Context) {
//Json数据解析
var person Person
if err := context.ReadJSON(&person); err != nil {
panic(err.Error())
}
context.Writef("获取信息: %#+v\n", person)
//输出:获取信息: main.Person{Name:"davie", Age:28}
})
//Post请求-Xml格式数据
/**
* 请求配置:Content-Type到application/xml(可选但最好设置)
* 请求内容:
* * <student>
* <stu_name>leo</stu_name>
* <stu_age>18</stu_age>
* </student>
*/
app.Post("/postXml", func(context context.Context) {
//XML数据解析
var student Student
if err := context.ReadXML(&student); err != nil {
panic(err.Error())
}
//输出:
context.Writef("Received:%#+v\n", student)
})
//put请求
app.Put("/putinfo", func(context context.Context) {
path := context.Path()
app.Logger().Info("请求url:", path)
})
//delete请求
app.Delete("/deleteuser", func(context context.Context) {
path := context.Path()
app.Logger().Info("Delete请求url:", path)
})
app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
}
PS: fmt.Printf 会根据后面参数格式化前面的字符串 ,fmt.Println 不会无格式字符串形式输出。
%v 字段的值
%+v 字段类型+字段的值
%#+v 结构体名字值+再输出结构体(字段类型+字段的值)