不能使用baseURL(type * url.URL)作为http.Get参数中的类型字符串

时间:2017-04-10 15:01:08

标签: go webserver

我编写了一个简单的Web服务器,它使用url.ResolveReference将一些相对路径附加到基本URL。然后我想使用http.Get()获取结果URL的内容,但问题是http.get()以字符串作为参数,我有一个类型为* 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)
}

1 个答案:

答案 0 :(得分: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)
}