周威学Go从入门到放弃第二十篇(发送http请求)

go发送http请求非常方便,调用http包一行代码即可,完整实现如下

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strconv"
	"time"

	"github.com/astaxie/beego"
)

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

type Person struct {
	Id    int         `form:"-"`
	Name  interface{} `form:"username"`
	Age   int         `form:"age"`
	Email string
}

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

func (this *MainController) Get() {
	//不同环境的配置读取
	username_dev := beego.AppConfig.String("dev::username")

	//返回到页面
	//this.Ctx.WriteString(rs)

	//传参数给页面
	this.Data["Author"] = username_dev
	this.Data["CreateTime"] = time.Now()

	//跳转到相关页面
	this.TplName = "index.tpl"

}

//restful 风格
func (this *MainController) Post() {
	u := Person{}
	if err := this.ParseForm(&u); err != nil {
		//handle error
	} else {
		fmt.Println("用户名:", u.Name)
		fmt.Println("年龄:", u.Age)
		fmt.Println("邮箱:", u.Email)
	}

	this.Data["json"] = map[string]interface{}{"code": "200", "data": u}
	this.ServeJSON()
	//	this.Ctx.WriteString("登录成功")
}
func httpGet() {
	resp, err := http.Get("http://localhost:8080/api/user/1")
	if err != nil {
		// handle error
	}

	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		// handle error
	}

	fmt.Println(string(body))
}

func (this *MainController) GetUser() {
	this.Data["json"] = map[string]interface{}{"code": "200", "msg": "success"}

	this.ServeJSON()
}
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_)
	httpGet()
	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/1 访问GetUsers方法,GetUsers方法中 调用httpGet方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值