Golang学习之net/http包

转载 2017年09月21日 17:52:23

       使用net/http包快速创建一个HTTP服务器。

// file http_test1.go
package main 

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

func HandleIndex(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    fmt.Println("PATH: ", r.URL.Path)
    fmt.Println("SCHEME: ", r.URL.Scheme)
    fmt.Println("METHOD: ", r.Method)
    fmt.Println()

    fmt.Fprintf(w, "<h1>Index Page</h1>")
}

func main() {
    http.HandleFunc("/", HandleIndex)
    err := http.ListenAndServe(":8000", nil)
    if err != nil {
        log.Fatal("ERROR: ", err)
    }
}

       其实有时候语言无关紧要,原理大抵相同。此handler就如同Python的WSGI协议application(environ, start_response),如同Nodejs的callback(req,res)函数。并且他们底层都是基于socket(好像是的!!!)

$ go run http_test1.go

       在浏览器中输入127.0.0.1:8000可以看到浏览器显示:
这里写图片描述

       在终端上打印出如下信息:
这里写图片描述

       虽然我们没有像其他语言一样显式地监听端口,启动服务器,或者用socket来搭建tcp或udp服务器,用while循环来获取请求数据。但是我们不难发现服务的入口在http.ListenAndServe。我们来看一下源码,探讨它究竟做了什么工作。

$ godoc -src net/http ListenAndServe

       会打印出来两个相似的函数:

func (srv *Server) ListenAndServe() error {
    addr := srv.Addr
    if addr == "" {
        addr = ":http"
    }
    ln, err := net.Listen("tcp", addr)
    if err != nil {
        return err
    }
    return srv.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)})
}

func ListenAndServe(addr string, handler Handler) error {
    server := &Server{Addr: addr, Handler: handler}
    return server.ListenAndServe()
}

       不要觉得这两个同名的函数像C++或Java一样是重载函数,Go语言中是没有函数签名这个概念的。

       第一个函数func (srv *Server) ListenAndServe() error,这是type Server struct类型的一个方法,你可以理解为面向对象中的方法,属于Server类。

       而第二个函数func ListenAndServe(addr string, handler Handler) error则是一个普通函数,内部进行封装,更简洁地实现HTTP服务器。你可以看到它创建了Server类的一个对象,然后调用了刚才说的第一个函数。

       转自:http://blog.csdn.net/cc7756789w/article/details/51014076

一个golang http包自带的绝佳示例

package main import ( "bytes" "expvar" "flag" "fmt" "io" "log" "net/http" "os" "os/exec" ...
  • u011363248
  • u011363248
  • 2014年02月14日 12:52
  • 3193

golang标准库学习——buffio包

import "bufio" bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象...
  • weiyuefei
  • weiyuefei
  • 2015年12月05日 16:30
  • 2327

golang 建立web服务器 http包源码详解

golang 建立web服务器 http包源码详解首先,熟悉http协议的都知道,http协议是基于TCP实现的。http服务器的工作方式大概就是监听socket端口,接受连接,获取到请求,处理请求,...
  • qq_24850089
  • qq_24850089
  • 2017年02月16日 04:21
  • 1268

golang中net/http包用法

1. 前言 http包包含http客户端和服务端的实现,利用Get,Head,Post,以及PostForm实现HTTP或者HTTPS的请求. 2. 本文分析内容安排 函数 Execute...
  • yuanfang_way
  • yuanfang_way
  • 2015年11月16日 18:37
  • 1843

golang net/http包使用

http客户端import “net/http” http包提供了HTTP客户端和服务端的实现。Get、Head、Post和PostForm函数发出HTTP/ HTTPS请求。package mai...
  • grassroots2011
  • grassroots2011
  • 2015年08月24日 13:57
  • 1167

golang中net/http包用法

http包包含http客户端和服务端的实现,利用Get,Head,Post,以及PostForm实现HTTP或者HTTPS的请求. 当客户端使用完response body后必须使用close对其进...
  • chenbaoke
  • chenbaoke
  • 2015年01月16日 20:29
  • 8246

Golang学习之net包详解

/** * Created by Administrator on 13-12-9. */ package mainimport ( "fmt" "os" "net" )/...
  • yxys01
  • yxys01
  • 2017年09月21日 18:15
  • 132

Golang学习之net包介绍

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

golang.org.x.net.tar.gz包下载

  • 2017年08月19日 09:11
  • 914KB
  • 下载

golang-net/http源码分析之http server

golang-net/http源码分析之http server
  • screscent
  • screscent
  • 2016年12月12日 15:52
  • 1469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Golang学习之net/http包
举报原因:
原因补充:

(最多只允许输入30个字)