我的程序中有多个Goroutine,每个Goroutine在没有任何显式同步的情况下调用fmt.Println.这是否安全(即,每行将单独出现而不会损坏数据),或者我是否需要创建另一个具有同步功能的Goroutine来专门处理打印?

推荐答案

不,这不安全,即使你有时可能没有发现任何问题.IIRC,fmt包试图安全起见,因此可能会发生某种混合,但希望不会出现进程崩溃.

这是一个更通用的GO文档规则的实例:除非另行指定,或者在上下文中显而易见的情况下,否则并发访问是不安全的.

您可以使用带有一些小初始设置的日志(log)包,获得fmt.Print*功能的一个很好的子集的安全版本.

Go相关问答推荐

为什么在GO中打印变量会导致堆栈溢出?

租户GUID X的租户不存在self 邮箱帐户的租户(我是唯一的成员)

golang有int32溢出吗?

重新赋值变量时未清除动态类型-这是错误吗?

Golang在不写入磁盘的情况下为jpeg图像生成一致的哈希

JWT 如何解析声明有效性和错误?

为什么 `go mod` 占用了另一个磁盘上的空间而不是我的 GOPATH?

从 ApiGateway 中的 lambda Go 返回 Json

缺少签名帮助文档

有没有办法约束(通用)类型参数?

在我的情况下,如何以正确的方式测试方法?

如何在 golang 中同时加载 .env 文件和 os 环境变量

Gorm 在保存/创建时序列化 struct

vs 代码调试 go 测试不通过标志

GoReleaser 和 ssh-agent Github 操作:为什么无法读取用户名...终端提示已禁用?

函数调用中的类型参数panic

Go:如何创建一个可以提供配置文件中描述的 url 的服务器

如何使用带有Electron 表格 ID、Electron 表格名称、表格 ID 和值的 golang 在 googlesheet 中插入数据

GOLANG 如何使用 http.FileServer 从模板目录加载某个 html 文件

gopls 为 github.com/Shopify/sarama 返回错误gopls: no packages returned: packages.Load error