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

标签: go语言 net http
13408人阅读 评论(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,很简单的呦!

这里写图片描述

查看评论

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

生命不止,继续go go go!!!不要问我net包和net/http包的区别,我们先会用,两者的区别慢慢去体会。net包有什么作用?Package net provides a portable i...
  • wangshubo1989
  • wangshubo1989
  • 2017年04月13日 02:19
  • 4803

Go net/http包

使用net/http包快速创建一个HTTP服务器。// file http_test1.go package main import ( "fmt" "net/http" "l...
  • cc7756789w
  • cc7756789w
  • 2016年03月29日 19:31
  • 500

go语言net/http包解析http body之坑

在Server端解析HTTP请求的时候, func ProcScaleOutReq(rsp http.ResponseWriter, req *http.Request) { req....
  • xq123
  • xq123
  • 2017年01月10日 21:48
  • 1231

Go net包介绍

与大多数语言一样,Go的标准库很全,因为Go的出现本来就是为了网络通信的高并发实现,所以其相关的网络库封装得更简洁,更Readable。这里来大致介绍几个网络库,掌握了学习方法,那么只要里面有那个库,...
  • cc7756789w
  • cc7756789w
  • 2016年03月30日 15:15
  • 2558

Go语言学习之encoding/xml(The way to go)

生命不止,继续 go go go !!!介绍了encoding/json包的使用,就没有理由不介绍encoding/xml包。xml vs jsonxml和json都是文本表示的数据格式: 跨平台 ...
  • wangshubo1989
  • wangshubo1989
  • 2017年05月02日 14:16
  • 3938

Go语言核心之美 1.4-包和文件

Go语言中的包(Package)就像其它语言的库(Library)或模块(Module)一样,支持模块化,封装性,可重用性,单独编译等特点。包的源码是由数个.go文件组成,这些文件所在的目录名是imp...
  • abv123456789
  • abv123456789
  • 2016年03月15日 17:39
  • 3171

Go语言net/http 解读.

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

Go语言WebSocket

转自:http://www.cnblogs.com/ghj1976/archive/2013/04/22/3035592.html Go语言标准包里面没有提供对WebSocket的支持,但是在由...
  • LeoHsiun
  • LeoHsiun
  • 2015年04月29日 16:33
  • 6061

Go网络编程之net/http包执行流程源码分析

1. http包建立web服务器 package main import (     "fmt"     "log"     "net/http"     "stri...
  • huwh_
  • huwh_
  • 2017年07月30日 15:11
  • 930

Go利用net/http包搭建Web服务器

简介 利用Go的标准包net/http可以很方便的搭建服务器。实际上只需要一个函数和一个接口: net/http−−−−−−−\underline{net/http} package http ...
  • u011304970
  • u011304970
  • 2017年05月26日 12:39
  • 1291
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 500万+
    积分: 4万+
    排名: 94
    Google Analytics
    博客专栏
    文章分类