簡體   English   中英

如何返回一個空的io.Reader?

[英]How to return a empty io.Reader?

我有一個返回io.Reader的函數:

func getData(bucket string, key string) (io.Reader, error) {
  svc := s3.New(cfg)

  req := svc.GetObjectRequest(&s3.GetObjectInput{
    Bucket: aws.String(bucket),
    Key:    aws.String(key),
  })

  res, err := req.Send()
  if err != nil {
    // How to return a empty io.Reader here?
    return bytes.NewReader([]byte), err
  }
  return res.Body, nil
}

我想知道如何從err塊返回空的io.Reader。

謝謝。

如果返回的錯誤值為非nil ,通常其他參數的值將保留為零 ,如果是io.Reader (接口類型),則其他參數應為nil

return nil, err

調用者有責任首先始終檢查返回的錯誤,並且只有在錯誤為nil時才繼續使用其他返回值。 這是一般的“規則”。 當然可能會有例外,在這種情況下,您應該記錄異常行為。

其實有什么錯與非一起提供其他值是nil誤差,而且往往是非常有用的。 典型的示例是io.Reader.Read()方法,該方法記錄了實現(必須)如何工作:

它返回讀取的字節數(0 <= n <= len(p))和遇到的任何錯誤。

...當成功讀取n> 0個字節后,Read遇到錯誤或文件結束條件時,它將返回讀取的字節數。

所以,即使Reader.Read()返回非nil誤差,它也報告有多少個字節是能夠成功地閱讀時遇到錯誤之前,所以你可以處理/使用多達n從切片字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM