go 网络请求封装

作者: 吃猫的鱼0 | 来源:发表于2018-01-04 10:55 被阅读9次

    HTTP

    简单demo

    url := "http://www.xiaohuar.com"  //定义一个URl。
    resp,err := http.Get(url) //获取url的内容。
    if err != nil {//如果有异常就打印异常
        log.Fatal(err)
    }
    defer resp.Body.Close()  //在方法运行完后关闭连接,万要关闭链接,不然会造成资源泄露。
    if resp.StatusCode != http.StatusOK{ //如果返回状出现错误,就抛出错误。
        log.Fatal(resp.Status)
    }
    io.Copy(os.Stdout,resp.Body) //将正常的结果输出到屏上,并不会占用内存。
    

    一个封装好的方法

    //发送请求
    func fetchUrl(data interface{}, url string, method string, resu interface{}) (error) {
        var res *http.Response
        var err error
        switch method {
        case http.MethodGet:
            res, err = http.Get(url)
            if err != nil {
                return err
            }
            break
        case http.MethodPost:
            jsonBytes, err := json.Marshal(data)
            if err != nil {
                return err
            }
            bodyReader := bytes.NewBuffer(jsonBytes)
            res, err = http.Post(url, "text/xml", bodyReader)
            if err != nil {
                return err
            }
            break
        }
        Body := res.Body
        defer Body.Close()
        body, err := ioutil.ReadAll(Body)
        fmt.Println(string(body))
        if err != nil {
            return err
        }
        err = json.Unmarshal(body, resu)
        if err != nil {
            return err
        }
        return nil
    }
    

    URL

    s := "http://www.xiaohuar.com"//定义地址
    u,err := url.Parse(s)           //请求地址
    if err != nil {//如果有异常就打印异常
        log.Fatal(err)
    }
    fmt.Println("使用的协议是:",u.Scheme)
    fmt.Println("主机名称是:",u.Host)
    fmt.Println("当前路径是:",u.Path)
    fmt.Println("请求信息是:",u.RawQuery)
    fmt.Println("用户信息是:",u.User)
    fmt.Println("当前的锚点是:",u.Fragment)

    相关文章

      网友评论

        本文标题:go 网络请求封装

        本文链接:https://www.haomeiwen.com/subject/kdtrnxtx.html