3

bufioパッケージからコードを読むと、次のようなことがわかりました。

// fill reads a new chunk into the buffer.
func (b *Reader) fill() {
    ...
    if b.w >= len(b.buf) {
        panic("bufio: tried to fill full buffer")
    }
    ...
}

同時に、Effective Go セクションpanicは次の段落が含まれています。

これは単なる例ですが、実際のライブラリ関数はパニックを回避する必要があります。問題を隠したり回避したりできる場合は、プログラム全体を停止するよりも、実行を継続する方が常に優れています。

それで、特定のバッファリングされたリーダーの問題はpanic、標準ライブラリコードで呼び出しを引き起こすほど重要ですか?

4

1 に答える 1

5

疑わしいかもしれませんが、考慮してください:fillはプライベート メソッドであり、b.wb.bufはプライベート フィールドです。パニックを引き起こす条件が常に真である場合、それは bufio の実装における論理エラーが原因です。そもそもその状態になることは絶対にあり得ない (「起こり得ない」状態) ため、どのようにしてそこに到達したのかはよくわかりません。また、問題が発生する前に他の状態がどの程度破損していたのかは不明です。が検出され、それに対してユーザーができること (あるとすれば)。そのような状況では、パニックは理にかなっているように思えます。

于 2016-04-26T05:20:18.147 に答える