英文:
Golang io/ioutil NopCloser
问题
有人能给出关于Golang的NopCloser
函数的好的或任何解释吗?我找了一下,但除了Golang的主要文档中的解释之外,没有找到其他任何东西:
> NopCloser返回一个包装提供的Reader r的无操作Close方法的ReadCloser。
如果有任何指导或解释,将不胜感激。谢谢。
英文:
Does anyone have a good or any explanation of Golang's NopCloser
function? <br> I looked around but failed to find anything besides Golang's main doc's explanation of:
> NopCloser returns a ReadCloser with a no-op Close method wrapping the
> provided Reader r.
Any pointers or explanation would be appreciated. Thanks.
答案1
得分: 39
每当你需要返回一个 io.ReadCloser
,同时确保有一个 Close()
方法可用时,你可以使用 NopCloser
来构建这样的 ReaderCloser。
你可以在这个 gorest 的分支 中的 util.go
文件中看到一个示例。
// 将接口 i 中的数据编组为一个字节切片,使用 mime 中指定的编组器/解组器。
// 在使用 gorest.RegisterMarshaller 注册编组器/解组器之前,必须先注册。
func InterfaceToBytes(i interface{}, mime string) (io.ReadCloser, error) {
v := reflect.ValueOf(i)
if v.Kind() == reflect.Ptr {
v = v.Elem()
}
switch v.Kind() {
case reflect.Bool:
x := v.Bool()
if x {
return ioutil.NopCloser(bytes.NewBuffer([]byte("true"))), nil
}
// ...
}
}
英文:
Whenever you need to return an io.ReadCloser
, while making sure a Close()
is available, you can use a NopCloser
to build such a ReaderCloser.
You can see one example in this fork of gorest, in util.go
//Marshals the data in interface i into a byte slice, using the Marhaller/Unmarshaller specified in mime.
//The Marhaller/Unmarshaller must have been registered before using gorest.RegisterMarshaller
func InterfaceToBytes(i interface{}, mime string) (io.ReadCloser, error) {
v := reflect.ValueOf(i)
if v.Kind() == reflect.Ptr {
v = v.Elem()
}
switch v.Kind() {
case reflect.Bool:
x := v.Bool()
if x {
return ioutil.NopCloser(bytes.NewBuffer([]byte("true"))), nil
}
答案2
得分: 17
这是用于需要io.ReadCloser
的函数,但是你当前的对象(例如bytes.Buffer
)没有提供Close函数。
英文:
It's used for functions that require io.ReadCloser
but your current object (for example a bytes.Buffer
) doesn't provide a Close function.
答案3
得分: 2
这是用于在需要提供具有Close
函数的项目时使用的,但是对于该项目来说,Close
函数并没有实际意义。因此,该函数基本上什么也不做:
func (nopCloser) Close() error { return nil }
https://github.com/golang/go/blob/go1.16.3/src/io/io.go#L620
英文:
It is for when you need to supply an item that has a Close
function, but when
Close
doesn't really make sense for that item. As such, the function pretty much
does nothing:
func (nopCloser) Close() error { return nil }
https://github.com/golang/go/blob/go1.16.3/src/io/io.go#L620
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论