第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

在 Go 中,當(dāng)一個(gè)函數(shù)返回錯(cuò)誤時(shí),其他變量是否總是它的“零”值?

在 Go 中,當(dāng)一個(gè)函數(shù)返回錯(cuò)誤時(shí),其他變量是否總是它的“零”值?

Go
小唯快跑啊 2021-12-07 15:11:28
我說的是 Go 標(biāo)準(zhǔn)庫:output, err := abc.Xyz()if err != nil {    // by convention is `output` always its "zero" value?}
查看完整描述

1 回答

?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

不總是。例如io.Reader

包io

類型閱讀器

type Reader interface {
        Read(p []byte) (n int, err error)}

Reader 是包裝基本 Read 方法的接口。

Read 將最多 len(p) 個(gè)字節(jié)讀入 p。它返回讀取的字節(jié)數(shù) (0 <= n <= len(p)) 和遇到的任何錯(cuò)誤。即使 Read 返回 n < len(p),它也可能在調(diào)用期間使用所有 p 作為暫存空間。如果某些數(shù)據(jù)可用但 len(p) 字節(jié)不可用,則 Read 通常會返回可用的數(shù)據(jù),而不是等待更多數(shù)據(jù)。

當(dāng) Read 在成功讀取 n > 0 個(gè)字節(jié)后遇到錯(cuò)誤或文件結(jié)束條件時(shí),它返回讀取的字節(jié)數(shù)。它可能會從同一個(gè)調(diào)用中返回(非零)錯(cuò)誤或從后續(xù)調(diào)用中返回錯(cuò)誤(和 n == 0)。這種一般情況的一個(gè)實(shí)例是,在輸入流末尾返回非零字節(jié)數(shù)的 Reader 可能返回 err == EOF 或 err == nil。下一個(gè) Read 應(yīng)該返回 0,EOF。

在考慮錯(cuò)誤 err 之前,調(diào)用者應(yīng)始終處理返回的 n > 0 個(gè)字節(jié)。這樣做可以正確處理讀取一些字節(jié)以及允許的 EOF 行為后發(fā)生的 I/O 錯(cuò)誤。

不鼓勵 Read 的實(shí)現(xiàn)返回帶有 nil 錯(cuò)誤的零字節(jié)計(jì)數(shù),除非 len(p) == 0。調(diào)用者應(yīng)該將返回 0 和 nil 視為表示沒有發(fā)生任何事情;特別是它不表示EOF。

實(shí)現(xiàn)不能保留 p。

例如,


readfile.go:


package main


import (

    "bufio"

    "fmt"

    "io"

    "os"

)


func main() {

    f, err := os.Open("readfile.go")

    if err != nil {

        fmt.Println(err)

        return

    }

    defer f.Close()

    r := bufio.NewReader(f)


    fileLen := int64(0)

    buf := make([]byte, 0, 4*1024)

    for {

        n, err := r.Read(buf[:cap(buf)])

        buf = buf[:n]

        if n == 0 {

            if err == nil {

                continue

            }

            if err == io.EOF {

                break

            }

            fmt.Println(err)

            return

        }


        // Do something with buf

        fileLen += int64(len(buf))


        if err != nil && err != io.EOF {

            fmt.Println(err)

            return

        }

    }

    fmt.Println("file length:", fileLen, "bytes")

}

如果是err != nil這樣,除非文檔另有說明,否則假定所有其他值都未定義。


查看完整回答
反對 回復(fù) 2021-12-07
  • 1 回答
  • 0 關(guān)注
  • 259 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號