由于研究k8s相关的开源产品,有时候难免会为了看个原理究竟 ,去看源码,偶尔有时间就开始学习golang相关的知识
本篇将使用Beego 框架 ,自建一个控制器
testController.go
package controllers
import (
"fmt"
"github.com/astaxie/beego"
)
// TestController is a test control
type TestController struct {
beego.Controller
}
// User is info of user
type User struct {
Username string
Password string
}
// Get is a function to test
func (c *TestController) Get() {
c.Ctx.WriteString(`<html><form action="http://127.0.0.1:8080/testcontrol" method="post">
<p>username: <input type="text" name="Username"></p>
<p>password: <input type="text" name="Password"></p>
<input type="submit" value="提交">
</form></html>`)
}
// Put is a function to test
func (c *TestController) Put() {
c.Ctx.WriteString("hello put")
}
// Post is a function to test
func (c *TestController) Post() {
u := User{}
if err := c.ParseForm(&u); err != nil {
fmt.Println("error")
}
c.Ctx.WriteString("username:" + u.Username)
c.Ctx.WriteString("password:" + u.Password)
}
这段代码 创建了一个TestController 的控制器,实现了 Get Put Post 方法
其中 Get方法 创建了一个表单 ,Post 方法 使用ParseForm 方法解析了结构体数据
route.go
package routers
import (
"WEB/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/testcontrol", &controllers.TestController{}, "get:Get")
beego.Router("/testcontrol", &controllers.TestController{}, "post:Post")
}
这段代码初始化了网页的访问路由 ,Get ,Post 分别使用testcontrol 访问
一个小细节
routes包前面的下划线 表示只加载 该包的init方法
也就是main方法一进来就会去初始化路由
运行效果:
bee run 启动项目
浏览器访问 日志输出地址:
端口可以在 此处进行配置
输入 账户 admin/admin
浏览器中打印出 对应的参数值
后台日志
注意:
之前一直输出的是空 ,获取不到对应的参数值,检查之后发现是定义结构体的时候 属性用的小写,一定要使用大写,才能被外部访问到
原来
修改后
参考:
https://www.imooc.com/article/261217?block_id=tuijian_wz