我在golang的zlib/reader.go文件中找到了很多像r.(flate.Reader)这样的代码片段。这是什么意思?
https://golang.org/src/compress/zlib/reader.go

func (z *reader) Reset(r io.Reader, dict []byte) error {
    if fr, ok := r.(flate.Reader); ok {
        z.r = fr
    } else {
        z.r = bufio.NewReader(r)
    }
    // more code omitted ...
}

附言ioflate的源代码。
io:https://golang.org/src/io/io.go
Flate:https://golang.org/src/compress/flate/inflate.go

最佳答案


r.(flate.Reader)是类型断言。例如,

func (z *reader) Reset(r io.Reader, dict []byte) error {
    if fr, ok := r.(flate.Reader); ok {
        z.r = fr
    } else {
        z.r = bufio.NewReader(r)
    }
    // more code omitted ...
}
rio.Reader类型interfacefr, ok := r.(flate.Reader)检查r以查看其是否包含io.Reader类型的flate.Reader

关于go - “r.(flate.Reader)”在golang的zlib/reader.go文件中是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33405373/

10-16 09:27