首次提交:初始化项目代码

This commit is contained in:
sunct
2026-07-31 15:18:32 +08:00
commit d6393266b0
193 changed files with 14287 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
// 打开源文件
srcFile, err := os.Open("io/source.txt")
if err != nil {
fmt.Printf("打开源文件失败: %v\n", err)
return
}
defer srcFile.Close()
// 创建目标文件
dstFile, err := os.Create("io/bufio_copy.txt")
if err != nil {
fmt.Printf("创建目标文件失败: %v\n", err)
return
}
defer dstFile.Close()
// 初始化缓冲读写器(默认4096字节缓冲区)
reader := bufio.NewReader(srcFile)
writer := bufio.NewWriter(dstFile)
// 函数退出前刷新缓冲区,确保数据落盘
defer func() {
if err := writer.Flush(); err != nil {
fmt.Printf("缓冲区刷新失败: %v\n", err)
}
}()
// 流式拷贝:io.Copy底层自动适配缓冲
written, err := io.Copy(writer, reader)
if err != nil {
fmt.Printf("文件拷贝失败: %v\n", err)
return
}
fmt.Printf("缓冲拷贝完成,总数据量: %d 字节\n", written)
}
+59
View File
@@ -0,0 +1,59 @@
package main
import (
"errors"
"fmt"
"io"
"os"
)
// PrefixReader 自定义Reader,读取固定前缀数据
type PrefixReader struct {
data []byte
offset int // 读取偏移量
}
// NewPrefixReader 创建自定义Reader实例
func NewPrefixReader(s string) *PrefixReader {
return &PrefixReader{
data: []byte(s),
}
}
// Read 实现io.Reader接口
func (r *PrefixReader) Read(p []byte) (int, error) {
if r.offset >= len(r.data) {
return 0, io.EOF
}
n := copy(p, r.data[r.offset:])
r.offset += n
return n, nil
}
func main() {
// 初始化自定义Reader
reader := NewPrefixReader("Go IO Reader 最佳实践")
buf := make([]byte, 16)
// 打开文件写入自定义Reader读取的数据
file, err := os.Create("io/reader.txt")
if err != nil {
fmt.Printf("创建文件失败: %v\n", err)
return
}
defer file.Close()
// 流式读取并写入文件
for {
n, err := reader.Read(buf)
if err == io.EOF {
break
}
if err != nil {
errors.New("读取失败")
return
}
_, _ = file.Write(buf[:n])
}
fmt.Println("自定义Reader读写完成")
}
+38
View File
@@ -0,0 +1,38 @@
package main
import (
"fmt"
"io"
"os"
)
func main() {
// 打开文件,支持读写+创建+清空
file, err := os.OpenFile("io/writer.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
if err != nil {
fmt.Printf("打开文件失败: %v\n", err)
return
}
defer file.Close()
// 待写入数据
content := "Go IO Writer 流式写入最佳实践\n支持流式、高性能、可扩展写入"
data := []byte(content)
// 1. 基础Write写入
n, err := file.Write(data)
if err != nil {
fmt.Printf("写入失败: %v\n", err)
return
}
fmt.Printf("基础写入长度: %d\n", n)
// 2. 使用io.WriteString工具方法写入
_, err = io.WriteString(file, "\n补充内容:io.Writer是Go IO核心抽象")
if err != nil {
fmt.Printf("字符串写入失败: %v\n", err)
return
}
fmt.Println("io.Writer 流式写入完成")
}
+1
View File
@@ -0,0 +1 @@
Go IO Reader 最佳实践
+3
View File
@@ -0,0 +1,3 @@
Go IO Writer 流式写入最佳实践
支持流式、高性能、可扩展写入
补充内容:io.Writer是Go IO核心抽象