Go IO

Posted alin-qu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go IO相关的知识,希望对你有一定的参考价值。

  • IO包 是对数据流的操作。从哪里来, 怎么处理,再到哪里去。
    技术分享图片

技术分享图片

图片来源 https://medium.com/learning-the-go-programming-language/streaming-io-in-go-d93507931185

  • IO包 对数据的读写 是通过接口的形式约定的。数据的来源或者去向可能是 网络,内存,文件。
type Reader interface {
     Read(p []byte) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}
  • 应用层 只需要按照接口去调用接口 不用关心底层实现细节 非常方便
package main

import (
    "io"
    "net/http"
    "os"
    "strings"
)

type R struct {
    reader io.Reader
}

func NewReader(r io.Reader) *R {
    return &R{
        reader: r,
    }
}

func (r *R) Read(p []byte) (n int, err error) {
    if _, err = r.reader.Read(p); err != nil {
        return
    }
    return len(p), nil
}

func main() {
    netR, err := http.Get("https://www.bilibili.com/")
    if err != nil {
        panic(err)
    }
    defer netR.Body.Close()
    fileR, err := os.Open("/tmp/data.txt")
    if err != nil {
        panic(err)
    }
    //读内存
    r1 := NewReader(strings.NewReader(""))
    b := make([]byte, 10*1024)
    if _, err := r1.Read(b); err != nil {
        panic(err)
    }
    //读网络
    r2 := NewReader(netR.Body)
    if _, err := r2.Read(b); err != nil {
        panic(err)
    }
    //读文件
    r3 := NewReader(fileR)
    if _, err := r3.Read(b); err != nil {
        panic(err)
    }
}

以上是关于Go IO的主要内容,如果未能解决你的问题,请参考以下文章

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

你知道的Go切片扩容机制可能是错的

java内存流:java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.CharArrayReaderjava.io(代码片段

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段

csharp C#代码片段 - 使类成为Singleton模式。 (C#4.0+)https://heiswayi.github.io/2016/simple-singleton-pattern-us

npm : 无法加载文件 D:softcodeProcess ode ode_global pm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +(代码片段