导读 使用 Golang 实现,使用 io.Copy 代替 ioutil.ReadAll。

题目

函数 调用 io.Copy(dst, src) 会从 src 中读取内容,并将读到的结果写入到 dst 中,使用这个函数替代掉例子中的 ioutil.ReadAll 来拷贝响应 结构体 到 os.Stdout,避免申请一个缓冲区(例子中的 b)来存储。记得处理 io.Copy 返回结果中的错误。

题目解决思路

我们只需要将 ioutil.ReadAll 替换为 io.Copy 函数。

代码具体实现
package main
import (
	"fmt"
	"io"
	"net/http"
	"os"
)
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	for _, url := range os.Args[1:] {
		resp, err := http.Get(url)
		if err != nil {
			fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
			os.Exit(1)
		}
		b, err := io.Copy(os.Stdout, resp.Body)
		resp.Body.Close()
		if err != nil {
			fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
			os.Exit(1)
		}
		fmt.Printf("%s", b)
	}
}

我们输入以下命令行,开始运行程序:

go run haicoder.go http://www.haicoder.net

程序运行后,控制台输出如下:

原文来自:https://haicoder.net/case/go-language/golang-1-7.html

本文地址:https://www.linuxprobe.com/golang-copy-readall.html编辑:薛鹏旭,审核员:逄增宝

Linux命令大全:https://www.linuxcool.com/

Linux系统大全:https://www.linuxdown.com/

红帽认证RHCE考试心得:https://www.rhce.net/