golang标准库io包

package main

import (
	"bytes"
	"fmt"
	"io"
	"log"
	"os"
	"strings"
)

func copy1() {
	r := strings.NewReader("wang fan")
	buf := make([]byte, 20)
	r.Read(buf)
	fmt.Printf("string(buf): %v\n", string(buf))
}

func copy2() {
	r := strings.NewReader("hello world")
	// 输出在控制台
	_, err := io.Copy(os.Stdout, r)
	if err != nil {
		log.Fatal(err)
	}
}

func copy3() {
	r1 := strings.NewReader("first reader\n")
	r2 := strings.NewReader("second reader\n")
	buf := make([]byte, 8)

	_, err1 := io.CopyBuffer(os.Stdout, r1, buf)
	if err1 != nil {
		log.Fatal(err1)
	}

	_, err2 := io.CopyBuffer(os.Stdout, r2, buf)
	if err2 != nil {
		log.Fatal(err2)
	}
}

func copy4() {
	r := strings.NewReader("some io.Reader stream to be read\n")
	lr := io.LimitReader(r, 6)
	if _, err := io.Copy(os.Stdout, lr); err != nil {
		log.Fatal(err)
	}
}

func copy5() {
	r1 := strings.NewReader("first reader ")
	r2 := strings.NewReader("second reader ")
	r3 := strings.NewReader("third reader\n")

	r := io.MultiReader(r1, r2, r3)
	if _, err := io.Copy(os.Stdout, r); err != nil {
		log.Fatal(err)
	}
}

func copy6() {
	r := strings.NewReader("some io.Reader stream to be read\n")

	var buf1, buf2 bytes.Buffer
	w := io.MultiWriter(&buf1, &buf2)

	if _, err := io.Copy(w, r); err != nil {
		log.Fatal(err)
	}
	fmt.Printf("buf1.String(): %v\n", buf1.String())
	fmt.Printf("buf2.String(): %v\n", buf2.String())
}

func copy7() {
	pr, pw := io.Pipe()
	go func() {
		fmt.Fprint(pw, "some io.Reader stream to be read\n")
		pw.Close()
	}()
	if _, err := io.Copy(os.Stdout, pr); err != nil {
		log.Fatal(err)
	}
}

func copy8() {
	r := strings.NewReader("Go is general-purpose language designed with systems programming in mind.")
	b, err := io.ReadAll(r)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("b: %v\n", string(b))
}

func copy9() {
	// 拆一部分
	r := strings.NewReader("Go is general-purpose language designed with systems programming in mind.")
	s := io.NewSectionReader(r, 5, 17)
	if _, err := io.Copy(os.Stdout, s); err != nil {
		log.Fatal(err)
	}
}

func main() {
	// copy1()
	// copy2()
	// copy3()
	// copy4()
	// copy5()
	// copy6()
	// copy7()
	// copy8()
	copy9()
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值