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

