Các thao tác I/O nâng cao trong Go bao gồm:
1. I/O được đệm với gói `bufio`:
- Trình đọc được lưu vào bộ đệm: Sử dụng `bufio.NewReader` để tạo một trình đọc được lưu vào bộ đệm có thể xử lý lượng lớn dữ liệu một cách hiệu quả.- Trình ghi được lưu vào bộ đệm: Sử dụng `bufio.NewWriter` để tạo trình ghi được lưu vào bộ đệm có thể xử lý lượng lớn dữ liệu một cách hiệu quả.
2. Người đọc Tee:
- TeeReader: Sử dụng `io.TeeReader` để chia dữ liệu đầu vào thành hai luồng. Điều này rất hữu ích khi bạn cần xử lý dữ liệu theo hai cách khác nhau.3. Dữ liệu đường ống:
- Pipe: Sử dụng `io.Pipe` để tạo một đường dẫn trong bộ nhớ đồng bộ có thể dùng để kết nối mã mong đợi `io.Reader` với mã mong đợi `io.Writer`.4. Đọc và ghi tệp:
- Đọc từ tệp: Sử dụng `os.Open` để mở tệp ở chế độ chỉ đọc và sau đó sử dụng `bufio.NewReader` để tạo trình đọc.- Ghi vào tệp: Sử dụng `os.Create` hoặc `os.OpenFile` để tạo hoặc mở tệp ở chế độ ghi và sau đó sử dụng `bufio.NewWriter` để tạo trình ghi.
5. Xử lý đồng thời:
- Xử lý tệp an toàn: Sử dụng `defer` để đảm bảo rằng các thẻ xử lý tệp được đóng đúng cách nhằm tránh rò rỉ tài nguyên.6. Sử dụng `io.Copy`:
- Sao chép dữ liệu: Sử dụng `io.Copy` để sao chép dữ liệu từ trình đọc này sang trình ghi khác.7. Sử dụng `io.CopyN`:
- Sao chép dữ liệu có giới hạn: Sử dụng `io.CopyN` để sao chép một lượng dữ liệu giới hạn từ trình đọc này sang trình ghi khác.8. Sử dụng `io.ReadAtLeast`:
- Đọc ít nhất một lượng dữ liệu nhất định: Sử dụng `io.ReadAtLeast` để đọc ít nhất một lượng dữ liệu nhất định từ trình đọc.9. Sử dụng `io.ReadFull`:
- Đọc toàn bộ số lượng: Sử dụng `io.ReadFull` để đọc toàn bộ lượng dữ liệu từ đầu đọc.10. Sử dụng `io.WriteString`:
- Viết chuỗi: Sử dụng `io.WriteString` để viết chuỗi cho người viết.11. Sử dụng `io.WriteString` với bộ đệm:
- Viết chuỗi bằng bộ đệm: Sử dụng `io.WriteString` với bộ đệm để ghi chuỗi vào trình ghi một cách hiệu quả.12. Sử dụng `io.MultiReader`:
- Đọc từ nhiều nguồn: Sử dụng `io.MultiReader` để đọc từ nhiều nguồn.13. Sử dụng `io.MultiWriter`:
- Ghi vào nhiều đích: Sử dụng `io.MultiWriter` để ghi vào nhiều đích.14. Sử dụng `io.PipeLine`:
- Tạo đường dẫn: Sử dụng `io.PipeLine` để tạo đường dẫn gồm người đọc và người viết.15. Sử dụng `io.ReadFull` với Bộ đệm:
- Đọc toàn bộ lượng dữ liệu bằng bộ đệm: Sử dụng `io.ReadFull` với bộ đệm để đọc toàn bộ lượng dữ liệu từ trình đọc một cách hiệu quả.Các thao tác I/O nâng cao này trong Go mang lại sự linh hoạt và khả năng kiểm soát cao hơn đối với cách đọc và ghi dữ liệu, giúp xử lý các tác vụ I/O phức tạp một cách hiệu quả dễ dàng hơn.
Trích dẫn:[1] https://www.developer.com/lacular/input-output-golang/
[2] https://www.educative.io/courses/advanced-techniques-in-go-programming/file-i-o
[3] https://www.codingexplorations.com/blog/mastering-io-readers-writers-go
[4] https://dev.to/romulogatto/file-io-in-go-488d
[5] https://hyperskill.org/learn/step/14527