对许多应用而言,访问互联网上的信息和访问本地文件系统一样重要。Go提供了一系列包,在net
包下面分组管理,使用它们可以方便地通过互联网发送和接受信息,使用底层地网络连接,创建服务器,此时Go的并发特性特别有用(在下面一节中会示例)
程序fetch
可以获取每个指定URL
的内容,然后不加解析地输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
// fetch 输出从URL获取的内容
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
for _, url := range os.Args[1:] {
res, err := http.Get(url)
if err != nil {
fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
os.Exit(1)
}
bytes, err := io.ReadAll(res.Body)
res.Body.Close()
if err != nil {
fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
os.Exit(1)
}
fmt.Printf("%s", bytes)
}
}
|
这个程序使用的函数来自两个包:net/http
和io
.http.Get
函数产生一个HTTP请求,如果没有出错,返回结果存在响应结构resp
里面。其中resp
的Body
域包含服务端相应的一个可读取数据流。随后io.ReadAll
读取整个响应结果并存储bytes
。关闭Body
数据流来避免资源泄漏,使用Printf
将响应输出到标准输出。
1
2
3
4
5
6
7
|
$ go run main.go https://go.dev
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<link rel="preconnect" href="https://www.googletagmanager.com">
<script >(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|