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