echo框架使用:获取与配置

运行环境 1

Linux   :CentOS 7.0
Go      :go version go1.8 linux/amd64
GOPATH  :/root/sdk/go/lib

运行环境 2

Windows10
Go      :go version go1.8 windows/amd64
GOPATH  :C:\Go\lib

安装 git

yum install git

获取 echo

go get -v -u github.com/labstack/echo/

获取日志

对于下载失败的库,都可以到github.com/golang/去找!

     
     
1
2
3
4
5
6
7
8
9
     
     
github.com /labstack/echo (download)
github.com /labstack/gommon (download)
github.com /mattn/go-colorable (download)
github.com /mattn/go-isatty (download)
github.com /valyala/fasttemplate (download)
Fetching https: //golang.org/x/crypto/acme/autocert?go-get=1
https fetch failed: Get https: //golang.org/x/crypto/acme/autocert?go-get=1: dial tcp 216.239.37.1:443: i/o timeout
package golang.org /x/crypto /acme/ autocert: unrecognized import path "golang.org/x/crypto/acme/autocert" (https fet
ch: Get https: //golang.org/x/crypto/acme/autocert?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

1、下到一半的时候可能会出现错误,这时,编译项目的时候缺少哪个包就去对应的下就好了,guthub上也有一些相对应的包(github源的包都能go get到的)

go get -u -v github.com/stretchr/testify/assert

2、项目会出现”golang.org/x/net/context”丢失,使用间接获取,

go get -u -v github.com/golang/net

在golang.org文件夹下创建x文件夹,将$GOPATH\src\github.com\golang 下的net复制到$GOPATH\src\golang.org\x目录下 ,然后执行:

go install -v golang.org/x/net/context

3、运行时可能会出现找不到包cannot find package “github.com/dgrijalva/jwt-go”

go get -u -v github.com/dgrijalva/jwt-go

再安装一遍echo

go install -v github.com/labstack/echo/

echo测试代码

api.go

     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
     
     
package api
import (
"../data"
"github.com/labstack/echo"
"net/http"
)
//noinspection GoUnusedExportedFunction
func PostTest(c echo.Context) error{
movies := []data.Movie{
{ "金刚狼", "2017", [] string{ "休·杰克曼", "达芙妮·基恩", "帕特里克·斯图尔特"}},
{ "极限特工", "2017", [] string{ "范·迪塞尔", "露比·罗丝", "妮娜·杜波夫"}},
{ "功夫瑜伽", "2017", [] string{ "成龙", "李治廷", "张艺兴"}},
{ "生化危机:终章", "2017", [] string{ "米拉·乔沃维奇", "伊恩·格雷", "艾丽·拉特"}},
}
baseMovie := data.BaseResponse{http.StatusOK, "success", movies}
return c.JSONPretty(http.StatusOK, baseMovie, " ")
}

BaseResponse.go

     
     
1
2
3
4
5
6
7
8
9
10
11
12
     
     
package data
// Go 默认是不支持泛型的,定义一个接口结构体,即可当泛型使用
type T interface {
}
type BaseResponse struct {
Code int
Msg string
Data T
}

Movie.go

     
     
1
2
3
4
5
6
7
     
     
package data
type Movie struct {
Title string
Year string
Actors [] string
}

main.go

     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
     
     
package main
import (
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
"./api"
)
func main() {
e := echo. New()
// Middleware
e. Use(middleware.Logger())
e. Use(middleware.Recover())
//CORS
e. Use(middleware.CORSWithConfig(middleware.CORSConfig{
AllowOrigins: []string{ "*"},
AllowMethods: []string{ echo.GET, echo.HEAD, echo.PUT, echo.PATCH, echo.POST, echo.DELETE},
}))
//static file serviing
e. Static( "/static", "assets")
// Routers
e.POST( "/", api.PostTest)
//e.GET("/users/:id", controllers.ShowUser)
//e.GET("/users", controllers.AllUsers)
//e.PUT("/users/:id", controllers.UpdateUser)
//e.DELETE("/users/:id",controllers.DeleteUser)
// Server
e.Start( ":1323")
}

echo监控

     
     
1
2
3
     
     
"D:\Program Files (x86)\JetBrains\Gogland\bin\runnerw.exe" C:/Go\bin\go.exe run E:/Code/Go-Home/server/main.go
⇛ http server started on [::]: 1323
{ "time": "2017-03-13T20:05:50.8909566+08:00", "id": "", "remote_ip": "::1", "host": "localhost:1323", "method": "POST", "uri": "/", "status": 200, "latency": 0, "latency_human": "0s", "bytes_in": 0, "bytes_out": 973}

请求测试

CentOS 7 防火墙问题

1.测试是否可以访问

telnet 123.56.4.89 1323

2.CentOS 7 关闭防火墙

firewall-cmd --zone=public --add-port=55555/tcp --permanent
firewall-cmd --reload

命令含义: –zone #作用域 –add-port=80/tcp #添加端口,格式为:端口/通讯协议 –permanent #永久生效,没有此参数重启后失效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echo 是一个用 Go 语言开发的快速 HTTP 路由器(零内存分配)和微型 Web 框架。 特性: Zippy router. Extensible middleware/handler, supports: func(*echo.Context) http.Handler http.HandlerFunc func(http.ResponseWriter, *http.Request) func(*echo.Context) func(echo.HandlerFunc) echo.HandlerFunc func(http.Handler) http.Handler http.Handler http.HandlerFunc func(http.ResponseWriter, *http.Request) Middleware Handler Handy encoding/decoding functions. 支持静态文件处理 示例代码: package main import ( "net/http" "github.com/labstack/echo" mw "github.com/labstack/echo/middleware" "github.com/rs/cors" "github.com/thoas/stats" ) type user struct { ID string `json:"id"` Name string `json:"name"` } var users map[string]user func init() { users = map[string]user{ "1": user{ ID: "1", Name: "Wreck-It Ralph", }, } } func createUser(c *echo.Context) { u := new(user) if c.Bind(u) { users[u.ID] = *u c.JSON(http.StatusCreated, u) } } func getUsers(c *echo.Context) { c.JSON(http.StatusOK, users) } func getUser(c *echo.Context) { c.JSON(http.StatusOK, users[c.P(0)]) } func main() { e := echo.New() //*************************// // Built-in middleware // //*************************// e.Use(mw.Logger) //****************************// // Third-party middleware // //****************************// // https://github.com/rs/cors e.Use(cors.Default().Handler) // https://github.com/thoas/stats s := stats.New() e.Use(s.Handler) // Route e.Get("/stats", func(c *echo.Context) { c.JSON(200, s.Data()) }) // Serve index file e.Index("public/index.html") // Serve static files e.Static("/js", "public/js") //************// // Routes // //************// e.Post("/users", createUser) e.Get("/users", getUsers) e.Get("/users/:id", getUser) // Start server e.Run(":8080") } 标签:Echo  Web框架
TP(ThinkPHP)框架的路由解析原理可以简单概括为以下三个步骤: 1. 获取请求信息:TP框架通过PHP的超全局变量`$_SERVER`和`$_REQUEST`获取当前请求的URL、请求方法等信息。 2. 解析路由规则:TP框架会根据路由规则解析当前请求的控制器、方法以及传递给方法的参数。路由规则可以通过配置文件或者注解方式定义。 3. 执行控制器方法:TP框架根据解析出来的控制器、方法和参数,执行相应的业务逻辑。 具体来说,TP框架的路由解析过程如下: 1. 获取请求信息: TP框架通过`$_SERVER`变量获取当前请求的URL和请求方法,例如: ``` $requestUri = $_SERVER['REQUEST_URI']; // 获取请求的URL $requestMethod = $_SERVER['REQUEST_METHOD']; // 获取请求的方法 ``` 2. 解析路由规则: TP框架支持多种路由规则,例如: - URL模式:`/:controller/:action/:id`,解析后会得到控制器名、方法名和参数`id`; - 路由规则:`'user/:id' => 'index/user/read'`,将`user/123`请求解析为`Index`控制器的`user`方法,并传递参数`id=123`; - 注解方式:使用注解标记控制器和方法,例如: ```php /** * @route('hello/:name') */ public function hello($name) { echo 'Hello '.$name; } ``` 以上是TP框架路由的基本使用方法,具体可以参考官方文档。 3. 执行控制器方法: TP框架根据解析出来的控制器名、方法名和参数,执行相应的业务逻辑。例如: ```php // 根据控制器名和方法名,实例化控制器对象并调用方法 $controller = '\\app\\index\\controller\\'.$controllerName; $instance = new $controller(); $instance->$actionName($param); ``` 注意,TP框架还支持路由缓存等优化方式,可以提高路由解析效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值