首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在go/golang中表示换行符最便携/跨平台的方式是什么?

在go/golang中表示换行符最便携/跨平台的方式是什么?
EN

Stack Overflow用户
提问于 2013-01-24 12:15:31
回答 3查看 26.1K关注 0票数 40

目前,为了在go程序中表示换行符,我使用\n。例如:

代码语言:javascript
复制
package main

import "fmt"


func main() {
    fmt.Printf("%d is %s \n", 'U', string(85))
}

..。将生成85 is U,后跟一个换行符。

然而,这看起来并不完全是跨平台的。看看其他语言,PHP用一个全局常量( PHP_EOL )来表示。在go / golang中,\n是以跨平台的方式表示换行符的正确方式吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-24 12:50:46

我对此很好奇,所以决定看看fmt.Println到底做了什么。http://golang.org/src/pkg/fmt/print.go

如果您滚动到最底部,您将看到一个始终使用\nif addnewline。我很难说这是否是最“跨平台”的方式,go在早期最初是与linux捆绑在一起的,但这就是std库的位置。

我最初建议只使用fmt.Fprintln,如果当前的功能不合适,这可能仍然有效,可以提交错误,然后只需使用最新的Go工具链编译代码即可。

票数 25
EN

Stack Overflow用户

发布于 2013-01-25 05:18:09

让操作系统确定换行符是什么在许多情况下都是错误的。你真正想知道的是“记录”分隔符是什么,Go假设你作为程序员应该知道这一点。

即使二进制文件在Windows上运行,它也可能会消耗Unix操作系统中的文件。

行结束是由文件或文档的源代码所说的行结束决定的,而不是由运行二进制文件的操作系统决定的。

票数 17
EN

Stack Overflow用户

发布于 2018-04-22 15:05:20

您可以始终使用特定于操作系统的文件来声明某些常量。就像_test.go文件仅在执行go test时使用一样,_[os].go仅在构建到该目标平台时包含。

基本上,您需要添加以下文件:

代码语言:javascript
复制
 - main.go
 - main_darwin.go     // Mac OSX
 - main_windows.go    // Windows
 - main_linux.go      // Linux

您可以在每个main_[os].go文件中声明一个LineBreak常量,并将您的逻辑放在main.go中。

文件的内容如下所示:

main_darwin.go

代码语言:javascript
复制
package somepkg

const LineBreak = "\n"

main_linux.go

代码语言:javascript
复制
package somepkg

const LineBreak = "\n"

main_windows.go

代码语言:javascript
复制
package somepkg

const LineBreak = "\r\n"

只需在main.go文件中编写代码并引用LineBreak

main.go

代码语言:javascript
复制
package main

import "fmt"


func main() {
    fmt.Printf("%d is %s %s", 'U', string(85), LineBreak)
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14493867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档