快速开始
安装
在go语言的安装目录下的src目录中创建如下目录,或者在其他的go path下的src目录下创建
$(GOROOT)
- src
- github.com
- labstack
- echo
- gommon
echo跟gommon下载地址如下
但是echo还依赖一些其他的包,需要下载
下载crypto
下载后放入到$(GOROOT)/src/golang.org/x/目录下
下载net
下载后同样放到$(GOROOT)/src/golang.org/x/目录下
下载text
下载后同样放到$(GOROOT)/src/golang.org/x/目录下
下载go-colorable
下载后放到$(GOROOT)/src/github.com/mattn/目录下
下载go-isatty
下载后放到$(GOROOT)/src/github.com/mattn/目录下
下载fasttemplate
下载后放到$(GOROOT)/src/github.com/valyala/目录下
初始
创建 test.go
package main
import (
"github.com/labstack/echo"
"net/http"
)
func main() {
e := echo.New()
e.GET("/", index) // 路径匹配
e.Logger.Fatal(e.Start(":1323")) // 端口号
}
func index(c echo.Context) error {
return c.String(http.StatusOK, "Hello, Echo!\n")
}
在终端运行 go run test.go
然后访问 127.0.0.1:1323 即可
请求方式
Echo对象下有GET()、POST()、PUT()、DELETE(),用来映射相应的get,post,put,delete请求
e.POST("/users", saveUser)
e.GET("/users", getUser)
e.PUT("/users", updateUser)
e.DELETE("/users", deleteUser)
url参数获取
url参数有两种,一种是路径参数(url上面的参数),一种是查询参数(跟在url后面,也就是?后面的参数)
路径参数
通过 :param_name 作为路径参数
e.GET("/user/:id", index) // 路径匹配
获取路径参数 127.0.0.1:1323/user/123456
func index(c echo.Context) error {
var userId string
userId = c.Param("id") // 获取路径参数123456
return c.String(http.StatusOK, "Hello, Echo!\n" + userId)
}
查询参数
查询参数就是url问号后面跟的参数
通过QueryParam("name")获取
userName := c.QueryParam("name")获取
获取form参数
userName := c.FormValue("name")
保存文件
使用c.FormFile()方法可以获取上传的文件,注意在html页面中form标签中加上 enctype="multipart/form-data" 参数
go
func index(c echo.Context) error {
avatar, err := c.FormFile("avatar") // 获取图片
if err != nil {
return err
}
// Source
src, err := avatar.Open() // 打开上传的文件
if err != nil {
return err
}
defer src.Close()
// Destination
dst, err := os.Create(avatar.Filename) // 要保存的地址
if err != nil {
return err
}
defer dst.Close()
// 粘贴
if _, err = io.Copy(dst, src); err != nil {
return err
}
return c.String(http.StatusOK, "OK")
}
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/user" method="post" enctype="multipart/form-data">
<input type="file" name="avatar">
<input type="submit" value="提交">
</form>
</body>
</html>
将Reqest body中的参数封装到struct中
type Info struct {
Name string `json:"name" xml:"name" form:"name" query:"name"`
Email string `json:"email" xml:"email" form:"email" query:"email"`
}
func index(c echo.Context) error {
var info = new(Info)
if err := c.Bind(info); err != nil {
return err
}
return c.JSON(http.StatusCreated, info)
}
静态目录
设置静态目录
e.Static("/static", "static")设置
设置后可以通过 /static/js/main.js 访问静态目录下的文件,主要用来存放css、js、图片、字体等文件
还可以设置默认访问的首页和icon
e.File("/", "public/index.html")
e.File("/favicon.ico", "images/favicon.ico")
模板渲染
echo可以通过c.HTML加载html文件渲染到浏览器
1. 首先要实现echo.Render接口
type Template struct {
templates *template.Template
}
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
return t.templates.ExecuteTemplate(w, name, data)
}
2. 预编译模板
t := &Template{
templates: template.Must(template.ParseGlob("template/*.html")),
}
3. 注册模板
e := echo.New() e.Renderer = t
4. 渲染
- 状态值 (int)
- 模板名,也就是对应的html文件的名字 (string)
- 数据字典,用于渲染模板的数据 (无类型, interface{})
func hello(c echo.Context) error {
return c.Render(http.StatusOK, "hello", "World")
}
完整代码
package main
import (
"github.com/labstack/echo"
"html/template"
"io"
"net/http"
)
type Template struct {
templates *template.Template
}
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
return t.templates.ExecuteTemplate(w, name, data)
}
func main() {
t := &Template{
templates: template.Must(template.ParseGlob("template/*.html")),
}
e := echo.New()
e.Renderer = t
e.GET("/hello", hello)
e.Logger.Fatal(e.Start(":1323"))
}
func hello(c echo.Context) error {
return c.Render(http.StatusOK, "hello", "World")
}

浙公网安备 33010602011771号