相关疑难解决方法(0)

为什么我应该使用log.Println而不是fmt.Println?

log.go(日志包的实现):

167 // Println calls l.Output to print to the logger.
168 // Arguments are handled in the manner of fmt.Println.
169 func (l *Logger) Println(v ...interface{}) { l.Output(2, fmt.Sprintln(v...)) }
Run Code Online (Sandbox Code Playgroud)

log.Println仅仅是一个功能包装的fmt.Sprintln,我为什么要使用它,而不是fmt.Printlnfmt.Sprintln

任何实际的原因?

logging go

62
推荐指数
1
解决办法
1万
查看次数

并发写入标准输出线程安全吗?

下面的代码不会引发数据竞争

package main

import (
    "fmt"
    "os"
    "strings"
)

func main() {
    x := strings.Repeat(" ", 1024)
    go func() {
        for {
            fmt.Fprintf(os.Stdout, x+"aa\n")
        }
    }()

    go func() {
        for {
            fmt.Fprintf(os.Stdout, x+"bb\n")
        }
    }()

    go func() {
        for {
            fmt.Fprintf(os.Stdout, x+"cc\n")
        }
    }()

    go func() {
        for {
            fmt.Fprintf(os.Stdout, x+"dd\n")
        }
    }()

    <-make(chan bool)
}
Run Code Online (Sandbox Code Playgroud)

我尝试了多种长度的数据,变体https://play.golang.org/p/29Cnwqj5K30

这篇文章说它不是TS。

这封邮件并没有真正回答问题,或者我没有理解。

osfmt 的包文档对此没有太多提及。我承认我没有挖掘这两个包的源代码来找到进一步的解释,它们对我来说太复杂了。

有哪些建议和参考

go

4
推荐指数
1
解决办法
176
查看次数

标签 统计

go ×2

logging ×1