• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【Go】使用Go调用Rest接口

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

用SpringBoot写了一个几个简单的Rest接口,对一个计数器进行查询,设置和增加,具体可以看:

https://www.cnblogs.com/wuyizuokan/p/11117294.html

废话不多说,直接上Go代码:

 

package main

import (
	"fmt"
	"net/http"
	"encoding/json"
	"bytes"
	"strings"
	"io/ioutil"
	"github.com/garyburd/redigo/redis"
	"errors"
	"time"
)

// 请求URL
const COUNT_URL ="http://localhost:8080/me/count"

//  定义一个Count结构体
type Count struct {
	Count int `json:"count"`
}

func main(){
	// 测试查询函数
	count,err := getCount()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("count: ", count)  // 初始计数为0,预计结果为0

	// 测试设置函数
	err = setCount(200)
	if err != nil {
		fmt.Println(err)
		return
	}

	count,err = getCount()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("count: ", count)  // 设置函数设置为了200,预计查询结果为200

	// 测试增加函数
	err = addCount(50)
	if err != nil {
		fmt.Println(err)
		return
	}

	count,err = getCount()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("count: ", count) // 增加函数增加了50,预计查询结果为250
}

/**
     给Count加上一个值
 */
func addCount(count int) error {
	reqCount := Count{Count:count} // 构造请求结构体
	reqCountBytes, err :=json.Marshal(reqCount) // 把请求结构体解析为json
	if err != nil {
		fmt.Println("marshal failed. the error info: ",err)
	}

	_,err = http.Post(COUNT_URL,"application/json", bytes.NewBuffer(reqCountBytes)) // 调用rest接口
	if err != nil {
		return err
	}

	return nil
}

/**
     给Count加上一个值,比如Count初始为10,输入20,Count会变为30
 */
func setCount(count int) error {
	reqCount := Count{Count:count} // 构造请求结构体
	reqCountBytes, err :=json.Marshal(reqCount) // 把请求结构体解析为json
	if err != nil {
		fmt.Println("marshal failed. the error info: ",err)
		return err
	}

	req,err :=http.NewRequest(http.MethodPut,COUNT_URL,strings.NewReader(string(reqCountBytes))) // 因为要调用的Rest接口是PUT类型的,需要先构造Request
	if err != nil {
		fmt.Println("new request failed with error: %s", err)
		return err
	}
	req.Header.Set("Content-Type", "application/json") // 注意要给Request的请求头添加上内容类型
	client := http.Client{}  // 创建一个httpClient
	_,err=client.Do(req)  // 调用rest接口
	if err != nil {
		return err
	}
	return nil
}
/**
    获取Count值
 */
func getCount() (count int, err error) {
	rsp,err :=http.Get(COUNT_URL) // Get接口直接调用就行了
	if err != nil {
		fmt.Println("get count has some error. the error info: ",err)
		return -1, err
	}

	defer rsp.Body.Close()  // defer语句类似于java中的try-catch-finally的finally,即在函数推出的时候,执行defer中的语句
	body, err := ioutil.ReadAll(rsp.Body) // 读取响应中的数据
	if err != nil {
		fmt.Println("get count has some error. the error info: ",err)
		return -1, err
	}

	rspCount := &Count{}
	json.Unmarshal(body, rspCount)  // 解析请求到结构体

	return rspCount.Count, nil
}

先启动SpringBoot服务:

运行Go代码的结果:

符合预期。

使用Postman查询:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【Go语言】LiteIDE使用的个人使用方法发布时间:2022-07-10
下一篇:
go语言游戏服务端开发(四)——RPC机制发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap