golang的zlib / reader.go文件中的“ r (flate.Reader)”是什么意思?
Go编程语言规范
类型断言
对于具有接口类型和类型T的表达式x,主要表达式
x.(T)
断言x不为nil,并且x中存储的值的类型为T。符号x。(T)称为类型断言。
在特殊形式的赋值或初始化中使用的类型断言
v, ok = x.(T) v, ok := x.(T) var v, ok = x.(T)
产生另一个无类型的布尔值。如果断言成立,则ok的值为true。否则为false,且v的值为T类型的零值。在这种情况下,不会发生运行时恐慌。C
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 ...
}
r
是类型io.Reader
的interface
。fr, ok := r.(flate.Reader)
检查r
是否包含io.Reader
类型为的flate.Reader
。
解决方法
我r.(flate.Reader)
在golang的zlib / reader.go文件中找到了很多代码片段。这是什么意思?
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 ...
}
的PS源代码io
和flate
。
io:https:
//golang.org/src/io/io.go平板:https
:
//golang.org/src/compress/flate/inflate.go
你可能想看: