go标准库04 网络(net包)

2017-09-28 17:17:16

net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。

我们大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Listener接口。crypto/tls包提供了相同的接口和类似的Dial和Listen函数。

Dial函数和服务端建立连接:

1
2
3
4
5
6
7
conn, err := net.Dial("tcp", "google.com:80")
if err != nil {
// handle error
}
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
status, err := bufio.NewReader(conn).ReadString('\n')
// ...

Listen函数创建的服务端:

1
2
3
4
5
6
7
8
9
10
11
12
ln, err := net.Listen("tcp", ":8080")
if err != nil {
// handle error
}
for {
conn, err := ln.Accept()
if err != nil {
// handle error
continue
}
go handleConnection(conn)
}

如果我们要实现一个http web服务,一般通过两种方法实现,一种是我们使用net包的net.Listen来对端口进行监听,另一个是使用net/http包,这里我们看下用net/http如何实现

  • http客户端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import (
    "fmt"
    "net/http"
    "io/ioutil"
    )

    func main() {
    response,_ := http.Get("http://www.baidu.com")
    defer response.Body.Close()
    body,_ := ioutil.ReadAll(response.Body)
    fmt.Println(string(body))
    }
  • http服务端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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(":8001", nil)

    }

    进行端口的监听:http.ListenAndServe(“:8001”, nil)
    注册路径处理函数:http.HandleFunc(“/hello”, SayHello)
    处理函数:func SayHello(w http.ResponseWriter, req *http.Request)


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。