周威学Go从入门到放弃第十七篇(beego框架四 restful接口,路径参数获取)

 如题,本篇主要整理了如下内容

  1. controller执行顺序 prepare init get/post/..    finish
  2. restful风格接口开发
  3. 自定义接口开发
  4. 路径参数接收,限制类型等

代码中有想起的注释

package main

import (
	"log"
	"strconv"
	"strings"

	"github.com/astaxie/beego"
)

type MainController struct {
	beego.Controller
}
type User struct {
	id   int64
	name string
}

func (this *MainController) Prepare() {
	log.Println("Prepare方法一定会执行 在get post等之前,在init之后")
}
func (this *MainController) Finish() {
	log.Println("Finish 在get post等之后")
}

func (this *MainController) Get() {
	//普通读取
	mysqlpass := beego.AppConfig.String("mysqlpass")
	//获取默认值
	default_value := beego.AppConfig.DefaultInt("age", 10)
	//不同环境的配置读取
	username_dev := beego.AppConfig.String("dev::username")
	username_test := beego.AppConfig.String("test::username")

	//conf文件可以使用include
	color := beego.AppConfig.String("test::color")
	rs := strings.Join([]string{mysqlpass, username_dev, username_test, strconv.Itoa(default_value), color}, "")
	res := "读取到的配置:" + rs
	log.Println(res)
	//返回到页面
	this.Ctx.WriteString(rs)
}

//restful 风格
func (this *MainController) Post() {
	this.Ctx.WriteString("post")
}

func (this *MainController) GetUser() {
	this.Ctx.WriteString("users")
}
func (this *MainController) GetUsers() {
	params := this.Ctx.Input.Params()
	for k, v := range params {
		log.Println(k, v)
	}

	id := params[":id"]
	type_ := params[":type"]
	log.Println("___", id, type_)
	this.Ctx.WriteString("users")
}
func (this *MainController) DeleteUser() {
	var id int
	id, _ = strconv.Atoi(this.Ctx.Input.Param(":id"))
	log.Println("id:", id)
	this.Ctx.WriteString("users")
}

func (this *MainController) UpdateUser() {
	//获取path中的变量
	username := this.Ctx.Input.Param(":username")
	log.Println("username:", username)
	user := User{id: 1, name: username}
	log.Println(user)
	this.Ctx.WriteString("update success")
}

func main() {
	beego.Router("/", &MainController{})
	//路径里多个参数的话用map来接收
	beego.Router("/api/user/:type:int/:id:int", &MainController{}, "get:GetUsers")
	//方法名要大写,大写是全局的  也可以直接一个路径定义多个方法
	beego.Router("/api/user/?:id:int", &MainController{}, "get:GetUser;delete:DeleteUser")
	//加问号 则http://localhost:8080/api/user  也可以匹配
	beego.Router("/api/user/?:username", &MainController{}, "put:UpdateUser")

	beego.Run()
}
http://localhost:8080/api/user/1/2

 

周威学Go从入门到放弃第十七篇(beego框架四 restful接口,路径参数获取)_第1张图片

你可能感兴趣的:(Go,GO语言学习)