6

パッケージReadBytes内のメソッドによってほぼ満足される機能を必要とするコードを書いています。具体的には、そのメソッドは、特定のバイトに遭遇するまでa からbufio読み取ります。Reader数バイトのうちの 1 つ (主にスペース、改行、およびタブ) に遭遇するまで読み取るものが必要です。

ライブラリのソースを調べたところ、構造体が使用する内部バッファにアクセスできる場合の対処方法がわかりましたbufio。パッケージに「モンキーパッチ」を適用して、別の方法または 2 つを追加する方法はありますか? または、必要な機能を取得する別の方法はありますか?

4

2 に答える 2

5

このアプローチに沿ったもの (注意: テストされていないコード):

type reader struct{
        *bufio.Reader // 'reader' inherits all bufio.Reader methods
}

func newReader(rd io.Reader) reader {
        return reader{bufio.NewReader(rd)}
}

// Override bufio.Reader.ReadBytes
func (r reader) ReadBytes(delim byte) (line []byte, err error) {
        // here goes the monkey patch
}

// Or

// Add a new method to bufio.Reader
func (r reader) ReadBytesEx(delims []byte) (line []byte, err error) {
        // here goes the new code
}

編集:これは、元のパッケージの内部 (エクスポートされていないエンティティ) へのアクセスには役立たないことに注意してください。コメントで指摘してくれた Abhay に感謝します。

于 2012-05-30T11:47:29.073 に答える