英文:
fprintln() writting Linux-style end of line under Windows
问题
你好!根据你的描述,你在Windows上使用Go语言,并使用fmt.Fprintln(w, line)
将文本写入文件。但是,行尾符是Linux风格的,而不是Windows风格的。你是否需要设置环境变量或其他什么东西来解决这个问题呢?
英文:
I'm running Go on Windows and writing lines to a file with fmt.Fprintln(w, line)
, but the end of line is Linux style end of lines and not Windows. Is there an environment variable I need to set or something?
答案1
得分: 1
不,fmt始终使用Unix换行符。如果你想要不同的换行符,你需要自己打印它。
英文:
No, fmt always uses unix line endings. If you want something different, you need to print it yourself.
答案2
得分: 1
正如Stephen Weinberg所说,fmt
中的print函数总是使用\n
作为换行符。
你可以在这里的代码中看到这一点。
作为一种解决方法,你可以定义自己的print函数,或者使用Printf
代替Println
:
fmt.Printf("Foo\r\n")
如果你想为程序运行环境中使用的换行符定义一个全局字符串,你可以为每个操作系统创建一个.go
文件,并使用构建标签来选择正确的文件。
另外,你可以编写一个解析runtime.GOOS
的函数(play链接):
func Newline() string {
switch runtime.GOOS {
case "windows":
return "\r\n"
// ...more...
case "linux":
fallthrough
default:
return "\n"
}
}
fmt.Printf("This is a line%s", Newline())
英文:
As Stephen Weinberg already said, the print function in fmt
always use \n
as line
separator.
You can see this in the code here.
As a workaround you may define your own print function or use Printf
instead of Println
:
fmt.Printf("Foo\r\n")
If you want to define a global string for the newline used in the environment your program runs,
you may create a .go
file for each operating system and use build tags to select the right one.
Alternatively, write a function which parses runtime.GOOS
(play):
func Newline() string {
switch runtime.GOOS {
case "windows":
return "\r\n"
// ...more...
case "linux":
fallthrough
default:
return "\n"
}
}
fmt.Printf("This is a line%s", Newline())
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论