英文:
How to write integers in a file using Golang?
问题
以下是翻译好的内容:
- 我生成从0到10的数字
- 我创建一个文件
- 然后我尝试将整数转换为字符串并写入文件
但是当我打开h.txt文件时,里面没有任何内容
如何修复这个问题并将数字写入h.txt文件?
package main
import "os"
func main() {
for i := 0; i < 10; i++ { // 生成...
f, _ := os.Create("h.txt") // 创建...
f.WriteString(string(i)) // 写入...
defer f.Close()
}
}
谢谢!
英文:
- I generate numbers from 0 to 10
- I create a file
- And I try to write to the file by converting integers to string
But when I open the h.txt file there is nothing written
How to fix this and have the numbers written to the h.txt file?
package main
import "os"
func main() {
for i := 0; i < 10; i++ { // Generating...
f, _ := os.Create("h.txt") // creating...
f.WriteString(string(i)) // writing...
defer f.Close()
}
}
Thanks!
答案1
得分: 6
你的代码存在一些问题。
1)你在循环的每次迭代中都打开文件,os.Create
会在文件已存在时截断文件,所以你可能在每次迭代中都在写入和截断文件。
2)你没有检查文件是否正确打开,是否有错误。
3)defer
会在函数结束时运行代码,而不是在作用域的末尾运行代码(即迭代的末尾)。
4)你应该正确地转换整数,使用转换并检查错误:_, err := f.WriteString(fmt.Sprintf("%d",i))
,然后检查错误。
尝试使用以下代码:
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.Create("h.txt") // 创建文件...
if err != nil {
fmt.Printf("创建文件时出错:%v", err)
return
}
defer f.Close()
for i := 0; i < 10; i++ { // 生成...
_, err = f.WriteString(fmt.Sprintf("%d\n", i)) // 写入...
if err != nil {
fmt.Printf("写入字符串时出错:%v", err)
}
}
}
英文:
There are a few issues with your code.
-
You're opening the file multiple times, every iteration of your loop;
os.Create
will truncate the file if it already exists, so you may be writing and truncating it on each iteration. -
You're not checking that the file opens correctly without error
-
defer
schedules code to run when the function ends, not at the end of the scope. (i.e. at the end of the iteration) -
You should convert the integer properly, using a conversion and checking the error:
_, err := f.WriteString(fmt.Sprintf("%d",i))
, and then check the error.
Try this:
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.Create("h.txt") // creating...
if err != nil {
fmt.Printf("error creating file: %v", err)
return
}
defer f.Close()
for i := 0; i < 10; i++ { // Generating...
_, err = f.WriteString(fmt.Sprintf("%d\n", i)) // writing...
if err != nil {
fmt.Printf("error writing string: %v", err)
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论