快速开始

安装

在go语言的安装目录下的src目录中创建如下目录,或者在其他的go path下的src目录下创建

$(GOROOT)
 - src
   - github.com
     - labstack
       - echo
       - gommon

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")
}

 

posted @ 2019-05-24 19:46  Jin同学  阅读(236)  评论(0)    收藏  举报