目前,为了代表go程序中的换行符,我使用\n
。例如:
package main
import "fmt"
func main() {
fmt.Printf("%d is %s \n", 'U', string(85))
}
...将产生85 is U
后跟换行符。
但是,这似乎不是跨平台的。查看其他语言,PHP使用全局常量(PHP_EOL
)表示它。 {/ 1}是在go / golang中以跨平台特定方式表示换行符的正确方法吗?
答案 0 :(得分:18)
我对此感到好奇,所以决定看看fmt.Println
究竟做了什么。 http://golang.org/src/pkg/fmt/print.go
如果滚动到最底部,您会看到始终使用if addnewline
的{{1}}。如果这是最“跨平台”的做法,我就不能说出来了,并且在最初阶段最初与linux绑定,但这就是std lib的用途。
我原本打算建议只使用\n
,这可能仍然有效,好像当前功能不合适,可以提交错误,然后代码只需要使用最新编译去工具链。
答案 1 :(得分:10)
让操作系统确定在多个上下文中出现的换行符是错误的。你真正想知道的是“记录”分隔符是什么,Go假设你是程序员应该知道的。
即使二进制文件在Windows上运行,它也可能正在消耗Unix操作系统中的文件。
行结尾取决于文件或文档的来源是什么,而不是二进制文件运行的操作系统。
答案 2 :(得分:6)
您始终可以使用特定于操作系统的文件来声明某些常量。就像_test.go
文件仅在执行go test
时使用一样,_[os].go
仅在构建到该目标平台时包含。
基本上你需要添加以下文件:
- main.go
- main_darwin.go // Mac OSX
- main_windows.go // Windows
- main_linux.go // Linux
您可以在每个main_[os].go
文件中声明一个LineBreak常量,并将您的逻辑放在main.go
中。
您的文件内容如下所示:
<强> main_darwin.go 强>
package somepkg
const LineBreak = "\n"
<强> main_linux.go 强>
package somepkg
const LineBreak = "\n"
<强> main_windows.go 强>
package somepkg
const LineBreak = "\r\n"
只需在您的main.go
文件中,编写代码并参阅LineBreak
<强> main.go 强>
package main
import "fmt"
func main() {
fmt.Printf("%d is %s %s", 'U', string(85), LineBreak)
}