go-reader - 課題
プロジェクト概要
go-reader は、ファイルから1行ずつ読み込む関数を実装する課題です。C言語の get_next_line に相当し、バッファリングとファイルI/Oの理解を深めます。
提出ファイル
go-reader/
├── go.mod
├── reader.go # メイン実装
└── reader_test.go # テスト
マンダトリー要件
実装する関数
// GetNextLine はファイルディスクリプタから1行読み込む
// 行末の改行文字を含む
// EOF に達した場合は残りの文字列を返し、次の呼び出しで "" を返す
func GetNextLine(fd int) (string, error)
// Reader 構造体を使用したバージョン
type LineReader struct {
// 内部実装
}
func NewLineReader(r io.Reader) *LineReader
func (lr *LineReader) ReadLine() (string, error)
動作仕様
- 改行文字: 行末の
\nを含めて返す - バッファサイズ: 固定サイズのバッファを使用(デフォルト: 1024バイト)
- 複数fd対応: 複数のファイルディスクリプタを同時に扱える
- EOF処理: ファイル末尾に達したら
io.EOFを返す
使用例
fd, _ := syscall.Open("file.txt", syscall.O_RDONLY, 0)
defer syscall.Close(fd)
for {
line, err := GetNextLine(fd)
if err == io.EOF {
break
}
fmt.Print(line)
}
ボーナス要件
禁止事項
bufio パッケージの使用禁止ioutil.ReadFile の使用禁止