Golang实现用户输入的文件读写操作代码示例
Golang实现用户输入的文件读写操作代码示例
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"strings"
//"log"
)
type data struct {
name string
surname string
contact string
id string
count int
}
var stringsetWM = " <<<<>>>>"
var stringsetMM = " <<<>>>"
var stringsetBE = " <<<<< >>>>>"
var stringsetOM = " <<<< Options >>>>"
var stringsetIM = " <<>>"
// 我需要一个用户控制的接口,用于多个应用程序
// ||我创建了一个简单稳定的用户界面
// 现在我需要3个可用的内部应用程序:控制、读取和写入
func input(in string) (out string) {
fmt.Scanln(&in)
out = in
return out
}
func main() {
subMain()
}
func subMain() {
var in string
// 考虑使用一些if和switch代码//目前for switch语句运行良好
fmt.Println(stringsetBE)
fmt.Println(stringsetWM+"\n", stringsetBE+"\n", stringsetIM+"\n", stringsetBE+"\n")
// for循环应该从这里开始
for {
fmt.Println(stringsetOM)
sInput := input(in)
switch sInput {
case "1":
option1()
// 如果只有读取、写入和构建逻辑
// 这个选项必须与构建逻辑相关
case "2":
// 这将是选项二。我不知道是否有选择
option2()
case "3":
// 控制台应用程序的3个选项,使用fmt包而不是http包
option3()
// 这样我可以读取文件,可能还可以读取端口
// 我可以写入文件和端口
default:
// 如果输入任何其他键,将显示此消息并再次等待
fmt.Println("抱歉,命令无效。")
}
}
}
// 这些选项作为应用程序基础核心的一部分
// 从那时起,选项可能是无限的
func option1() {
// 第一个选项是控制系统的一部分
fmt.Println("这是特别的功能,它依赖于命令提示符的强大功能")
// 让我们思考!控制台最重要的功能是与端口通信!!
}
func option2() {
// 第二个选项是读取部分
fmt.Println("欢迎使用选项2。在这里您可以读取文本文件")
readfile()
}
func option3() {
// 第三个选项是写入部分
fmt.Println("此选项用于以某种方式将内容写入文件")
writefile()
}
func readfile() {
// readfile是我前几天编写的代码,然后粘贴到这里
// 过程:从用户输入接收文件名
// 过程:读取用户指向的文件
// 过程:读取数据并以某种方式处理
var filepath string
fmt.Println("请输入您要查找的文件名?")
fileinput := input(filepath) + ".txt" // 现在可以工作
file, err := ioutil.ReadFile(fileinput)
if err != nil {
fmt.Println("查找文件时出错。", err)
}
var sFile = string(file)
// string将目标数据转换为字符串数据
var theCount int
var unSpec int
var sKey string
var oKey string
// 首先我们创建扫描器作为NewScanner,并将其指向sFile
scanner := bufio.NewScanner(strings.NewReader(sFile))
// 在这里我们将扫描器数据文件分割为逐词扫描
scanner.Split(bufio.ScanWords)
// 声明oKey数据并要求用户输入
fmt.Println("请输入您要查找的单词?")
oKey = input(sKey)
// for scanner.Scan()将遍历文本数据的每一行并循环
// 直到达到EOF条件为真。
for scanner.Scan() {
var stringScan = scanner.Text()
switch stringScan {
case oKey:
// 单词计数器
// 单词查找器和计数器
theCount++
default:
unSpec++
}
}
if theCount < 1 {
fmt.Println("抱歉,找不到您要查找的单词")
}
if theCount > 0 {
fmt.Printf("单词 %s 被找到 %d 次。\n", oKey, theCount)
}
}
func writefile() {
var name string
var in = input(name)
file, err := os.Create(in + ".txt") // 这段代码应该创建一个名为...的文件
if err != nil {
fmt.Println("创建文件失败。", err)
}
if err == nil {
fmt.Println("成功创建文件。")
}
defer file.Close()
// 创建文件后,我现在需要向其中写入一些数据
var path = in + ".txt"
// 使用读取和写入权限打开文件
var oFile, error = os.OpenFile(path, os.O_RDWR, 0644)
if error != nil {
return
}
defer oFile.Close()
var person data
person.name = "姓名\n"
person.surname = "姓氏\n"
person.id = "身份证号\n"
person.contact = "电话号码\n"
oFile.WriteString("注意:\n")
oFile.WriteString(person.name)
oFile.WriteString(person.surname)
oFile.WriteString(string(person.id))
oFile.WriteString(string(person.contact))
// 逐行向文件写入一些文本
var hello, _ = oFile.WriteString("你好Golang程序员\n")
fmt.Println("这里你好,那里你好", hello)
//if err != nil { return }
var message = "仅作示例。想象更多内容\n"
var msg, _ = oFile.WriteString(message)
fmt.Println("正在打印..", msg)
_, err = oFile.WriteString("这是结尾\n")
if err != nil {
return
}
// 保存更改
err = file.Sync()
if err != nil {
return
}
fmt.Println("==> 完成文件写入 <==")
}
// 很可能将被称为writefile()
// 然后之后会有
更多关于Golang实现用户输入的文件读写操作代码示例的实战教程也可以访问 https://www.itying.com/category-94-b0.html
能否请您提出一个恰当的问题,并以更易读的方式格式化您的代码?本论坛使用 Markdown 来格式化帖子。
更多关于Golang实现用户输入的文件读写操作代码示例的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
以下是针对您提供的Golang文件读写操作代码的专业分析和改进建议。代码整体结构清晰,但存在一些潜在问题,如输入处理逻辑、错误处理不完整以及文件操作冗余。我将通过示例代码展示如何优化这些部分。
1. 输入函数优化
原代码中的input函数通过fmt.Scanln读取输入,但参数传递方式可能导致问题。建议直接读取并返回输入值,避免不必要的参数。
func input() string {
reader := bufio.NewReader(os.Stdin)
in, _ := reader.ReadString('\n')
return strings.TrimSpace(in)
}
此版本使用bufio.Reader读取整行输入,并去除换行符,确保输入完整性。
2. 读取文件功能改进
在readfile函数中,文件读取和单词计数逻辑可以优化错误处理和资源管理。
func readfile() {
fmt.Println("请输入文件名(不含扩展名):")
filename := input() + ".txt"
content, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Printf("读取文件失败:%v\n", err)
return
}
text := string(content)
fmt.Println("请输入要查找的单词:")
targetWord := input()
words := strings.Fields(text)
count := 0
for _, word := range words {
if word == targetWord {
count++
}
}
if count == 0 {
fmt.Printf("未找到单词 '%s'\n", targetWord)
} else {
fmt.Printf("单词 '%s' 出现 %d 次\n", targetWord, count)
}
}
此代码使用strings.Fields分割单词,简化逻辑,并明确错误处理。
3. 写入文件功能优化
原writefile函数创建文件后重复打开,造成冗余。以下示例直接使用创建的文件句柄进行写入:
func writefile() {
fmt.Println("请输入新文件名(不含扩展名):")
filename := input() + ".txt"
file, err := os.Create(filename)
if err != nil {
fmt.Printf("创建文件失败:%v\n", err)
return
}
defer file.Close()
data := data{
name: "姓名\n",
surname: "姓氏\n",
id: "身份证号\n",
contact: "电话号码\n",
}
lines := []string{
"注意:\n",
data.name,
data.surname,
data.id,
data.contact,
"你好Golang程序员\n",
"仅作示例。想象更多内容\n",
"这是结尾\n",
}
for _, line := range lines {
_, err := file.WriteString(line)
if err != nil {
fmt.Printf("写入文件失败:%v\n", err)
return
}
}
err = file.Sync()
if err != nil {
fmt.Printf("同步文件失败:%v\n", err)
return
}
fmt.Println("文件写入完成")
}
此版本通过切片批量写入内容,减少重复代码,并确保错误处理覆盖所有操作。
4. 主循环和选项处理
主循环中的input调用需更新为无参数版本:
for {
fmt.Println(stringsetOM)
sInput := input() // 移除参数
switch sInput {
case "1":
option1()
case "2":
option2()
case "3":
option3()
default:
fmt.Println("无效命令,请重新输入。")
}
}
总结
以上优化解决了输入处理、错误管理和代码冗余问题。关键改进包括:
- 使用
bufio.Reader实现可靠输入。 - 通过
strings.Fields简化单词分割。 - 消除文件操作中的重复打开。
- 统一错误处理并提供详细反馈。
示例代码可直接替换原函数,提升程序的健壮性和可维护性。

