关闭

Go语言学习之net/http包(The way to go)

标签: go语言nethttp
12985人阅读 评论(0) 收藏 举报
分类:

生命不止,继续go go go!!!

从包名就能看到了吧,是golang中提供http的包:
provides HTTP client and server implementations.

先看一个例子:

package main

import "net/http"

func main() {
    http.ListenAndServe(":8080", http.FileServer(http.Dir(".")))
}

然后浏览器输入:localhost:8080/main.go

http.FileServer

func FileServer(root FileSystem) Handler

FileServer returns a handler that serves HTTP requests with the contents of the file system rooted at root.
上面的实例代码中,使用是“.”,表示的是当前目录,也可以这样:

http.ListenAndServe(":8080", http.FileServer(http.Dir("/usr/share/doc")))

ListenAndServe

func ListenAndServe(addr string, handler Handler) error

HandleFunc
HandleFunc registers the handler function for the given pattern in the DefaultServeMux.

func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

创建一个简单的web服务器
那么,看下面的例子,应用ListenAndServe和HandleFunc:

package main

import (
    "io"
    "log"
    "net/http"
)

// hello world, the web server
func HelloServer(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "hello, world!\n")
}

func main() {
    http.HandleFunc("/hello", HelloServer)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

浏览器输入:
http://localhost:12345/hello

http.ResponseWriter
这是一个接口:
A ResponseWriter interface is used by an HTTP handler to construct an HTTP response.
定义如下:

type ResponseWriter interface {

         Header() Header    

         WriteHeader(http.StatusOK)

         Write([]byte) (int, error)

         WriteHeader(int)
    }

*http.Request
这是一个结构:
A Request represents an HTTP request received by a server or to be sent by a client.
定义如下:

 type Request struct {
            Method string
            URL *url.URL
            Proto      string // "HTTP/1.0"
            ProtoMajor int    // 1
            ProtoMinor int    // 0
            Header Header
            Body io.ReadCloser
            ContentLength int64
            TransferEncoding []string
            Close bool
            Host string
            Form url.Values
            PostForm url.Values
            MultipartForm *multipart.Form
            Trailer Header
            RemoteAddr string
            RequestURI string
            TLS *tls.ConnectionState
    }

Get

package main

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

func main() {
    response, err := http.Get("https://www.google.com")
    if err != nil {
        // handle error
    }

    defer response.Body.Close()

    body, _ := ioutil.ReadAll(response.Body)
    fmt.Println(string(body))
}

Post

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "bytes"
)

func main() {
    body := "{\"action\":20}"
    res, err := http.Post("http://xxx.com", "application/json;charset=utf-8", bytes.NewBuffer([]byte(body)))
    if err != nil {
        fmt.Println("Fatal error ", err.Error())
    }

    defer res.Body.Close()

    content, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println("Fatal error ", err.Error())
    }

    fmt.Println(string(content))
}

PostForm

resp, err := http.PostForm("http://example.com/form",
    url.Values{"key": {"Value"}, "id": {"123"}})

接下来,会跟大家介绍golang实现简单的restful api,很简单的呦!

这里写图片描述

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Go net包介绍

与大多数语言一样,Go的标准库很全,因为Go的出现本来就是为了网络通信的高并发实现,所以其相关的网络库封装得更简洁,更Readable。这里来大致介绍几个网络库,掌握了学习方法,那么只要里面有那个库,你就能找到,就能快速了解怎么查阅。net.ResolveIPAddr()根据域名查找IP地址不得不感...
  • cc7756789w
  • cc7756789w
  • 2016-03-30 15:15
  • 2006

Go语言net/http 解读.

Http包提供实现HTTP客户端和服务端的方法与函数。 Get、Head、Post、PostForm配合使用实现HTTP请求: resp, err := http.Get("http://example.com/") resp, err := http.Post("...
  • fyxichen
  • fyxichen
  • 2015-08-18 11:15
  • 3949

Go语言Http Server源码阅读

转自:http://www.cnblogs.com/yjf512/archive/2012/08/22/2650873.html 这篇文章出现的理由是业务上需要创建一个Web Server。创建web是所有语言出现必须实现的功能之一了。在nginx+fastcgi+php广为使用的今天,这里我...
  • LeoHsiun
  • LeoHsiun
  • 2015-04-29 20:24
  • 1511

go net/http Client使用——长连接客户端的使用

go net/http Client使用总结 Client数据结构 // A Client is an HTTP client. Its zero value (DefaultClient) is a // usable client that uses DefaultTransport. /...
  • u013870094
  • u013870094
  • 2017-12-06 15:46
  • 375

Go net/http 超时机制完全手册

原文链接:http://colobu.com/2016/07/01/the-complete-guide-to-golang-net-http-timeouts/ 英文原始出处: The complete guide to Go net/http timeouts , ...
  • u013870094
  • u013870094
  • 2017-11-10 21:03
  • 123

【Go】原生http get和post请求框架

Go语言实现客户端client角色,向其他地址发送Get/Post请求,并获取数据(json格式)头文件引用import( "bytes" "encoding/json" "fmt" "io/iou...
  • RazilFelix
  • RazilFelix
  • 2017-06-23 15:41
  • 1551

go语言实现http服务端与客户端

go语言的net/http包的使用非常的简单优雅 (1)服务端 package main import ( "flag" "fmt" "net/http" ) func main() { host := flag.String(...
  • u010087712
  • u010087712
  • 2016-03-15 10:03
  • 4688

Go Web编程:http包分析

一个简单的web服务package mainimport ( "io" "log" "net/http" )func HelloGoServer(w http.ResponseWriter, req *http.Re...
  • uudou
  • uudou
  • 2016-10-05 12:22
  • 2413

go http包学习

go http包学习 go root下的~/goroot/pkg/.a文件和 ~/goroot/src/*.go文件的区别 net/http/client.go net/http/cookie.go 由于包下面的文件比较多这样写下来文档比较大,所以后面一个go文件写一篇笔记,写文档的目的是督促自己完...
  • textdemo123
  • textdemo123
  • 2016-12-02 19:07
  • 1606

Go语言包管理(一)

Go语言中的包我们在使用其他语言,比如Java,Python,都有类似包的概念,Go也不例外,其核心思想即为分组和模块化。人的大脑对庞大和复杂的事情很难掌控,可以对其采用分而治之的策略,使其模块化,从而更容易管理。 如下是标准库中net包的树形结构图 net ├─http │ ├─...
  • matrix65537
  • matrix65537
  • 2017-05-15 20:24
  • 501
    个人资料
    • 访问:4552876次
    • 积分:40859
    • 等级:
    • 排名:第105名
    • 原创:566篇
    • 转载:29篇
    • 译文:13篇
    • 评论:768条
    微信公众号
      我的微信公众号
      为你推荐最新的博文~更有惊喜等着你
    时光荏苒
      白驹过隙
    博客专栏
    文章分类
    百度统计
    Google Analytics