目前,为了在go程序中表示换行符,我使用\n。例如:
package main
import "fmt"
func main() {
fmt.Printf("%d is %s \n", 'U', string(85))
}..。将生成85 is U,后跟一个换行符。
然而,这看起来并不完全是跨平台的。看看其他语言,PHP用一个全局常量( PHP_EOL )来表示。在go / golang中,\n是以跨平台的方式表示换行符的正确方式吗?
发布于 2013-01-24 12:50:46
我对此很好奇,所以决定看看fmt.Println到底做了什么。http://golang.org/src/pkg/fmt/print.go
如果您滚动到最底部,您将看到一个始终使用\n的if addnewline。我很难说这是否是最“跨平台”的方式,go在早期最初是与linux捆绑在一起的,但这就是std库的位置。
我最初建议只使用fmt.Fprintln,如果当前的功能不合适,这可能仍然有效,可以提交错误,然后只需使用最新的Go工具链编译代码即可。
发布于 2013-01-25 05:18:09
让操作系统确定换行符是什么在许多情况下都是错误的。你真正想知道的是“记录”分隔符是什么,Go假设你作为程序员应该知道这一点。
即使二进制文件在Windows上运行,它也可能会消耗Unix操作系统中的文件。
行结束是由文件或文档的源代码所说的行结束决定的,而不是由运行二进制文件的操作系统决定的。
发布于 2018-04-22 15:05:20
您可以始终使用特定于操作系统的文件来声明某些常量。就像_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)
}https://stackoverflow.com/questions/14493867
复制相似问题