2015-06-04 5 views
24

का निर्माण कर रहे हैं मैं जाने के लिए बहुत नया हूं और अभी तक सबकुछ समझ नहीं पा रहा हूं। कई आधुनिक भाषाओं में Node.js, कोणीय, jQuery, PHP आप अतिरिक्त क्वेरी स्ट्रिंग पैरामीटर के साथ एक GET अनुरोध कर सकते हैं।एक GET अनुरोध कर रहे हैं और Querystring

गो में ऐसा करना काफी आसान नहीं है, और मैं वास्तव में इसे अभी तक नहीं समझ सकता। मैं वास्तव में उन सभी अनुरोधों के लिए एक स्ट्रिंग को जोड़ना नहीं चाहता हूं जो मैं करना चाहता हूं।

package main 

import (
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 

func main() { 
    client := &http.Client{} 

    req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular", nil) 
    req.Header.Add("Accept", "application/json") 
    resp, err := client.Do(req) 

    if err != nil { 
     fmt.Println("Errored when sending request to the server") 
     return 
    } 

    defer resp.Body.Close() 
    resp_body, _ := ioutil.ReadAll(resp.Body) 

    fmt.Println(resp.Status) 
    fmt.Println(string(resp_body)) 
} 

इस उदाहरण आप देख सकते हैं एक यूआरएल है, जो मूल्य के रूप में अपने api कुंजी के साथ api_key की GET चर की आवश्यकता होती है में:

यहाँ नमूना स्क्रिप्ट है। समस्या की जा रही इस कठिन के रूप में कोडित फिर हो सकती है:

req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular?api_key=mySuperAwesomeApiKey", nil) 

इस क्वेरी स्ट्रिंग गतिशील निर्माण करने के लिए एक रास्ता है ?? फिलहाल मुझे वैध प्रतिक्रिया प्राप्त करने के लिए इस चरण से पहले यूआरएल इकट्ठा करने की आवश्यकता होगी।

+1

तो क्या एक स्ट्रिंग श्रृंखलाबद्ध साथ गलत क्या है? –

+3

मुझे कुछ भी नहीं लगता है, लेकिन यह वास्तव में एक सुरुचिपूर्ण सोल्शन नहीं है, बस सोचा कि गो में चीजों को करने का एक बेहतर तरीका है। आप क्रिया परिवर्तन, विधि देखते हैं और फिर आपको सब कुछ एक साथ स्ट्रिंग करना होगा। –

+1

आप ['url.Values'] (https://golang.org/pkg/net/url/#Values) का उपयोग कर सकते हैं [' एनकोड'] (https://golang.org/pkg/net/url /#Values.Encode) विधि। संपूर्ण यूआरएल बनाने के लिए आप ['URL.String'] (https://golang.org/pkg/net/url/#URL.String) का भी उपयोग कर सकते हैं। –

उत्तर

86

एक टिप्पणीकर्ता के रूप में आप Valuesnet/url से प्राप्त कर सकते हैं जिसमें Encode विधि है। आप कुछ इस तरह कर सकता है (req.URL.Query() रिटर्न मौजूदा url.Values)

package main 

import (
    "fmt" 
    "log" 
    "net/http" 
    "os" 
) 

func main() { 
    req, err := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular", nil) 
    if err != nil { 
     log.Print(err) 
     os.Exit(1) 
    } 

    q := req.URL.Query() 
    q.Add("api_key", "key_from_environment_or_flag") 
    q.Add("another_thing", "foo & bar") 
    req.URL.RawQuery = q.Encode() 

    fmt.Println(req.URL.String()) 
    // Output: 
    // http://api.themoviedb.org/3/tv/popular?another_thing=foo+%26+bar&api_key=key_from_environment_or_flag 
} 

http://play.golang.org/p/L5XCrw9VIG

+0

बहुत बढ़िया धन्यवाद आदमी! यही वही है जो मैं ढूंढ रहा था! –

+0

भी परीक्षण के लिए बढ़िया! –

+1

सराहना की, धन्यवाद। – djsd123

संबंधित मुद्दे