【Go】使用Go調用Rest接口


用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查詢:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM