http包提供了HTTP客户端和服务端的实现

一:http客户端的几种方法

1、 func (c *Client) Get(url string) (resp *Response, err error)
说明: 利用get方法请求指定的url,Get请求指定的页面信息,并返回实体主体

2、func (c *Client) Head(url string) (resp *Response, err error)
说明:利用head方法请求指定的url,Head只返回页面的首部

3、func (c *Client) Post(url string, bodyType string, body io.Reader) (resp *Response, err error)
说明:利用post方法请求指定的URl,如果body也是一个io.Closer,则在请求之后关闭它

4、func (c *Client) PostForm(url string, data url.Values) (resp *Response, err error)
说明:利用post方法请求指定的url,利用data的key和value作为请求体.

5、func (c *Client) Do(req *Request) (resp *Response, err error)
说明:Do发送http请求并且返回一个http响应,遵守client的策略,如重定向,cookies以及auth等.当调用者读完resp.body之后应该关闭它,

如果resp.body没有关闭,则Client底层RoundTripper将无法重用存在的TCP连接去服务接下来的请求,如果resp.body非nil,则必须对其进行关闭.
通常来说,经常使用Get,Post,或者PostForm来替代Do

代码示例

1、http.Get

package main

import (
"fmt"
"io/ioutil"
"net/http"
) func main() {
requestUrl := "http://www.baidu.com"
response, err := http.Get(requestUrl) if err != nil {
fmt.Println(err)
} defer response.Body.Close() body, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(body))
}

2、http.Post

package main

import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"net/url"
) func main() {
requestUrl := "http://www.baidu.com/" // request, err := http.Get(requestUrl)
// request, err := http.Head(requestUrl)
postValue := url.Values{
"username": {"hangmeimei"},
"address": {"anhui"},
"subject": {"world"},
"form": {"beij"},
}
//request, err := http.PostForm(requestUrl, postValue) body := bytes.NewBufferString(postValue.Encode())
request, err := http.Post(requestUrl, "text/html", body)
if err != nil {
fmt.Println(err)
} defer request.Body.Close()
fmt.Println(request.StatusCode)
if request.StatusCode == {
rb, err := ioutil.ReadAll(request.Body)
if err != nil {
fmt.Println(rb)
}
fmt.Println(string(rb))
}
}

3、 http.Do

package main

import (
"fmt"
"io/ioutil"
"net/http"
"strconv"
) func main() {
client := &http.Client{}
request, err := http.NewRequest("GET", "http://www.baidu.com", nil)
if err != nil {
fmt.Println(err)
} cookie := &http.Cookie{Name: "Tom", Value: strconv.Itoa()}
request.AddCookie(cookie) //向request中添加cookie //设置request的header
request.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
request.Header.Set("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3")
request.Header.Set("Accept-Encoding", "gzip,deflate,sdch")
request.Header.Set("Accept-Language", "zh-CN,zh;q=0.8")
request.Header.Set("Cache-Control", "max-age=0")
request.Header.Set("Connection", "keep-alive") response, err := client.Do(request)
if err != nil {
fmt.Println(err)
return
} defer response.Body.Close()
fmt.Println(response.StatusCode)
if response.StatusCode == {
r, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(r))
}
}

二:建立web服务器

package main

import (
"net/http"
) func SayHello(w http.ResponseWriter, req *http.Request) {
w.Write([]byte("Hello"))
} func main() {
http.HandleFunc("/hello", SayHello)
http.ListenAndServe(":8080", nil)
}

说明:
首先调用Http.HandleFunc
往DefaultServeMux的map[string]muxEntry中增加对应的handler和路由规则

http.ListenAndServe
启动一个http服务器,监听8080端口
上面的代码中蕴含着http服务器处理http的流程,有时间可以看源码分析分析

参考:

https://www.cnblogs.com/msnsj/p/4365186.html

http://www.infoq.com/cn/articles/golang-standard-library-part02

go的net/http用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

  10. [转]thinkphp 模板显示display和assign的用法

    thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...

随机推荐

  1. 转 My97日历控件常用功能记录

    My97相信大家都不陌生,应该是我所见过的最强大的一个日历控件了,最近的项目中也比较多地用到了此控件,而且项目中经常会有不同时间范围的需求,在此列出一些比较常用的日期范围格式的设置,尽管在My97的官 ...

  2. SharePoint 2013 使用 RBS 功能将二进制大型对象 BLOB 存储在内容数据库外部。

    为每个内容数据库设置 BLOB 存储   启用并配置 FILESTREAM 之后,请按照以下过程在文件系统中设置 BLOB 存储.必须为要对其使用 RBS 的每个内容数据库设置 BLOB 存储. 设置 ...

  3. 前端动态属性页面的 要用id做name 因为这样方便在提交表单时候取到值

    前端动态属性页面的 要用id做name 因为这样方便在提交表单时候取到值

  4. Django restframe 视图函数以及ModelSerializer的使用

    建立model数据库 from django.db import models __all__ = ['Book', 'Publisher', 'Author'] # Create your mode ...

  5. 洛谷P1916 小书童——蚂蚁大战

    题目背景 小A在你的帮助下,开始“刷题”,他在小书童里发现了一款叫“蚂蚁大战”(又称蛋糕保卫战)的游戏.(你懂得) 题目描述 游戏中会出现n只蚂蚁,分别有a1,a2……an的血量,它们要吃你的蛋糕.当 ...

  6. .net MVC 访问404

    MVC 项目访问总是404 有几种情况: 1 地址打错了. 2 controller/action  但是action方法含有[ActionName("Index")] 重命名了. ...

  7. codeforces1101D GCD Counting 【树形DP】

    题目分析: 蛮简单的一道题,对于每个数拆质因子,对于每个质因子找出最长链,在每个地方枚举一下拼接 代码: #include<bits/stdc++.h> using namespace s ...

  8. Quartus prime 16.0 中通过JTAG固化程序

    前言 下载项目sof文件到开发板中,掉电后会消失:由于开发板有JTAG口,则可以用JTAG固化jic文件到EPCS16芯片中. 流程 1.打开quartus软件并打开convert programmi ...

  9. 【AGC013C】Ants on a Circle 弹性碰撞

    题目大意 一个长度为\(lm\)的环上有\(n\)只蚂蚁,告诉你每只蚂蚁的位置和朝向,每只蚂蚁会向前爬,速度为\(1m/s\),两只蚂蚁相遇后都会掉头,问你\(t\)秒后每只蚂蚁的位置. \(n\le ...

  10. MobaXterm之取消自动关闭连接 Network error :Connection timed out

    连一会就出现连接重来的问题 配置如下.