2017-04-10 1 views
-1

url.ResolveReferenceを使用してベースURLに相対パスを追加する簡単なWebサーバーを作成しました。そして、http.Get()を使用して結果のURLのコンテンツを取得したいのですが、問題はhttp.get()が文字列を引数として取り、タイプが* url.URLのオブジェクトがあることです。この問題を解決する方法?http.Getへの引数にbaseURL(type * url.URL)をタイプ文字列として使用できません

私のコードを怒鳴る与えられます。

package main 

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

func factHandler(w http.ResponseWriter, r *http.Request) { 
    str1 := "http://www.meaningfultype.com/" 
    u1, _ := url.Parse(str1) 
    str2 := "/clarendon.html" 
    u2, _ := url.Parse(str2) 
    u3 := u1.ResolveReference(u2) 
    fmt.Println("url:", u3) 
    res, err := http.Get(u3) 
    if err != nil { 
     log.Fatal(err) 
    } 
    robots, err := ioutil.ReadAll(res.Body) 

    res.Body.Close() 
    if err != nil { 
     log.Fatal(err) 
    } 
    contentType := res.Header.Get("Content-Type") 
    w.Header().Set("Content-Type", contentType) 
    w.Write(robots) 
} 
+2

'URL'はない'文字列() 'メソッドを持っていますそれ。 –

答えて

0

は、U3のString()メソッドを呼び出し、http.Get()に返された文字列を渡す:

package main 

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

func factHandler(w http.ResponseWriter, r *http.Request) { 
    str1 := "http://www.meaningfultype.com/" 
    u1, _ := url.Parse(str1) 
    str2 := "/clarendon.html" 
    u2, _ := url.Parse(str2) 
    u3 := u1.ResolveReference(u2) 
    fmt.Println("url:", u3) 
    res, err := http.Get(u3.String())   // Change this line 
    if err != nil { 
     log.Fatal(err) 
    } 
    robots, err := ioutil.ReadAll(res.Body) 

    res.Body.Close() 
    if err != nil { 
     log.Fatal(err) 
    } 
    contentType := res.Header.Get("Content-Type") 
    w.Header().Set("Content-Type", contentType) 
    w.Write(robots) 
} 
関連する問題