一些示例Go版本需>=1.18
读取文件
1、将文件整个读入内存
package main
import (
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("../log.txt")
if err != nil {
panic(err)
}
defer file.Close()
content, err := io.ReadAll(file)
fmt.Println(string(content))
}
或者
package main
import (
"os"
"fmt"
)
func main() {
filepath := "../log.txt"
content ,err := os.ReadFile(filepath)
if err !=nil {
panic(err)
}
fmt.Println(string(content))
}
2、按字节读取文件
package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)
func main() {
filepath := "../log.txt"
fi, err := os.Open(filepath)
if err != nil {
panic(err)
}
defer fi.Close()
r := bufio.NewReader(fi)
chunks := make([]byte, 0)
buf := make([]byte, 1024)
for {
n, err := r.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
fmt.Println(string(buf[:n]))
break
if 0 == n {
break
}
chunks = append(chunks, buf[:n]...)
}
fmt.Println(string(chunks))
}
或者
package main
import (
"fmt"
"io"
"os"
)
func main() {
file := "../log.txt"
f, err := os.Open(file)
if err != nil {
panic(err)
}
defer f.Close()
chunks := make([]byte, 0)
buf := make([]byte, 1024)
for {
n, err := f.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if 0 == n {
break
}
chunks = append(chunks, buf[:n]...)
}
fmt.Println(string(chunks))
}
3、按行读取
package main
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
func main() {
filepath := "../log.txt"
file, err := os.OpenFile(filepath, os.O_RDWR, 0666)
if err != nil {
fmt.Println("Open file error!", err)
return
}
defer file.Close()
stat, err := file.Stat()
if err != nil {
panic(err)
}
var size = stat.Size()
fmt.Println("file size=", size)
buf := bufio.NewReader(file)
for {
line, err := buf.ReadString('\n')
line = strings.TrimSpace(line)
fmt.Println(line)
if err != nil {
if err == io.EOF {
fmt.Println("File read ok!")
break
} else {
fmt.Println("Read file error!", err)
return
}
}
}
}
写入文件
1、os.WriteFile每次都会覆盖 test.txt内容,如果test.txt文件不存在会创建。
package main
import (
"os"
)
func main() {
content := []byte("测试1\n测试2\n")
err := os.WriteFile("test.txt", content, 0644)
if err != nil {
panic(err)
}
}
2:os结尾写入
package main
import (
"fmt"
"io"
"os"
)
func checkFileIsExist(filename string) bool {
if _, err := os.Stat(filename); os.IsNotExist(err) {
return false
}
return true
}
func main() {
var wireteString = "测试1\n测试2\n"
var filename = "./test.txt"
var f *os.File
var err1 error
if checkFileIsExist(filename) {
f, err1 = os.OpenFile(filename, os.O_APPEND, 0666)
fmt.Println("文件存在")
} else {
f, err1 = os.Create(filename)
fmt.Println("文件不存在")
}
defer f.Close()
n, err1 := io.WriteString(f, wireteString)
if err1 != nil {
panic(err1)
}
fmt.Printf("写入 %d 个字节n", n)
}
3: os
package main
import (
"fmt"
"os"
)
func checkFileIsExist(filename string) bool {
if _, err := os.Stat(filename); os.IsNotExist(err) {
return false
}
return true
}
func main() {
var str = "测试1\n测试2\n"
var filename = "./test.txt"
var f *os.File
var err1 error
if checkFileIsExist(filename) {
f, err1 = os.OpenFile(filename, os.O_APPEND, 0666)
fmt.Println("文件存在")
} else {
f, err1 = os.Create(filename)
fmt.Println("文件不存在")
}
defer f.Close()
n, err1 := f.Write([]byte(str))
fmt.Printf("写入 %d 个字节n", n)
n, err1 = f.WriteString(str)
if err1 != nil {
panic(err1)
}
fmt.Printf("写入 %d 个字节n", n)
f.Sync()
}
4: os
package main
import (
"fmt"
"os"
)
func checkFileIsExist(filename string) bool {
if _, err := os.Stat(filename); os.IsNotExist(err) {
return false
}
return true
}
func main() {
var str = "测试1\n测试2\n"
var filename = "./test.txt"
var f *os.File
var err1 error
if checkFileIsExist(filename) {
f, err1 = os.OpenFile(filename, os.O_APPEND, 0666)
fmt.Println("文件存在")
} else {
f, err1 = os.Create(filename)
fmt.Println("文件不存在")
}
defer f.Close()
n, err1 := f.Write([]byte(str))
fmt.Printf("写入 %d 个字节n", n)
n, err1 = f.WriteString(str)
if err1 != nil {
panic(err1)
}
fmt.Printf("写入 %d 个字节n", n)
f.Sync()
}
5:bufio
package main
import (
"bufio"
"fmt"
"os"
)
func checkFileIsExist(filename string) bool {
if _, err := os.Stat(filename); os.IsNotExist(err) {
return false
}
return true
}
func main() {
var str = "测试1\n测试2\n"
var filename = "./test.txt"
var f *os.File
var err1 error
if checkFileIsExist(filename) {
f, err1 = os.OpenFile(filename, os.O_APPEND, 0666)
fmt.Println("文件存在")
} else {
f, err1 = os.Create(filename)
fmt.Println("文件不存在")
}
defer f.Close()
if err1 != nil {
panic(err1)
}
w := bufio.NewWriter(f)
n, _ := w.WriteString(str)
fmt.Printf("写入 %d 个字节n", n)
w.Flush()
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!