2015-06-04 25 views
24

'u oluşturmaya gidin Gitmek için oldukça yeni ve henüz her şeyi tam olarak anlamadım. Node.js, Angular, jQuery, PHP'nin modern dillerinin çoğunda ek sorgu dizesi parametreleriyle bir GET isteği yapabilirsiniz.Bir GET isteği yaparak ve Querystring

Bunu Go’da yapmak, göründüğü kadar basit değil ve henüz bunu çözemiyorum. Yapmak istediğim her istek için bir dizeyi birleştirmek istemiyorum.

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)) 
} 

Eğer değer olarak api anahtarı ile API_KEY bir GET değişkeni gerektiren bir URL olduğunu görebilirsiniz Bu örnekte: Burada

örnek komut dosyasıdır. dinamik bu sorgu dizesi oluşturmak için bir yol var mı

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

??: Sorun bu zor şeklinde kodlanmış olur ediliyor o Şu anda geçerli bir yanıt almak için bu adımın öncesinde URL'yi bir araya getirmem gerekiyor.

+1

Yani bir dizesinin belirtilen sorunun ne? –

+3

Sanırım hiçbir şey yok, ama gerçekten zarif bir solleksiyon değil, sadece Go'da işleri yapmanın daha iyi bir yolu olduğunu düşündüm. Eylem değişikliklerini görüyorsunuz, yöntem ve sonra her şeyi bir araya getirmeniz gerekiyor. –

+1

['url.Values'] (https://golang.org/pkg/net/url/#Values) 's [' Encode']' u kullanabilirsiniz (https://golang.org/pkg/net/url /#Values.Encode) yöntemi. URL'nin tamamını oluşturmak için ['URL.String'] (https://golang.org/pkg/net/url/#URL.String) adresini de kullanabilirsiniz. –

cevap

86

Belirtilen bir yorumlayıcı olarak, Encode yöntemine sahip olan net/url adresinden Values alabilirsiniz. Böyle bir şey yapabileceğini (req.URL.Query() döner varolan 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

Awesome teşekkür ederim adamım! Tam olarak aradığım şey bu! –

+0

Test için harika! –

+1

Takdir edildi, teşekkürler. – djsd123

İlgili konular