在Go項目開發的過程當中http
的請求方式挺多,不想去記憶,每次直接使用最基本的方式。json
// 複雜的請求參數
func HttpPost(url string) string {
type Server struct {
ServerName string
ServerIp string
Age int
}
type ServerSlice struct {
Server []Server
ServersID string
}
//post 第三個參數是io.reader interface
//strings.NewReader byte.NewReader bytes.NewBuffer 實現了read 方法
s := ServerSlice{
ServersID: "tearm",
Server: []Server{{"beijing", "127.0.0.1", 20}, {"shanghai", "127.0.0.1", 22}},
}
b, _ := json.Marshal(s) // 這裏的s既能夠是結構體,也能夠是map[][]類型
client := &http.Client{}
// 若是存在參數,只需序列化成字符串,並轉化爲io.reader類型,傳入第三個參數
req, err := http.NewRequest("POST", url, strings.NewReader("heel="+string(b)))
if err != nil {
panic(err)
}
// 設置請求數據類型:"application/json","application/x-www-form-urlencoded"
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
// handle error
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
return string(body)
}
func HttpGet(url string) string {
//生成client 參數爲默認
client := &http.Client{}
//第三個參數是io.reader interface
//strings.NewReader byte.NewReader bytes.NewBuffer 實現了read 方法
// 若是存在參數,只需序列化成字符串,並轉化爲io.reader類型,傳入第三個參數
// 舉個例子:?name=pj&age=18 則傳入參數能夠爲: strings.NewReader("name=pj&age=18")
req, err := http.NewRequest("GET", url, nil)
if err != nil {
// handle err
}
// 設置請求頭
// req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
//處理返回結果
response, _ := client.Do(req)
body, err := ioutil.ReadAll(response.Body)
if err != nil {
// handle err
}
return string(body)
}
複製代碼