关于使用log与使用fmt的区别

最初的就是直接打印出来,之后一点点升级,比如加上输出的时间,加上goroutine之间的并发操作(打印信息并不能一定按照你规定好的顺序输出来 每次输出的顺序可能会不同),按照不同的日志级别进行打印 。。。加上打印以及转存,因此就需要专门的log包来记录程序的信息。

想象一下,一个很大的项目有很多的输出信息,要是输出信息前面没有加上日期的话,debug起来几乎是难以想象的,因为不可能一直盯着屏幕来对信息进行监控。

因此采用log来代替fmt的原因主要有一下几个方面:

  • 添加了输出时间
  • 线程安全
  • 方便对日志信息进行转存,形成日志文件

关于logger的基本结构,可以参考这个博客:
http://gotaly.blog.51cto.com/8861157/1406905

看logger的结构,除了基本的信息之外,还有许多其他的功能:
http://studygolang.com/articles/3383

具体理解log是线程安全的,可以参考这个博客:
http://blog.csdn.net/paladinosment/article/details/42666147

还有日志的转存打印
创建New对象的时候,通过控制第一个参数,可以直接输出到标准输出上,也可以存到文件中。

如果仅仅想输出到终端,可以直接调用log.XXX方法,不用先生成一个logger对象,再去通过logger对象来调用。在log包中,有一些methods是直接对logger的实现,有一些是直接的库函数,可以直接使用。

http://www.sharejs.com/codes/go/7308

关于单元测试时候的t.logf
这个在内部其实还是使用类似的logs的方法,都是对基本的并行的操作进行了封装之后再处理的,加上了mutex操作,因此在单元测试中也并不推荐直接使用fmt.printf的方法。

Golang中log与fmt区别的更多相关文章

  1. golang中new和make区别

    golang 中有两个内存分配机制 :new和make,二者有明显区别. new:用来初始化一个对象,并且返回该对象的首地址.其自身是一个指针.可用于初始化任何类型 make:返回一个初始化的实例,返 ...

  2. 深入学习golang中new与make区别

    Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives).对于初学者,这两者的区别也挺容易让人迷糊的.简单的说,new只分配内存,make用于slic ...

  3. golang中sync.RWMutex和sync.Mutex区别

    golang中sync包实现了两种锁Mutex (互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的,只读锁的实现使用类似引用计数器的功能. type Mutex     f ...

  4. golang 你所不知道的 log 和 fmt

    直接点说,就是由于fmt 是线程不安全的, 如果你在多协程场景下使用fmt打印信息可能会得到乱序的结果 就是说 不按代码里的顺序打印. 下面看示例 代码示例 golang fmt 多线程 乱序: fu ...

  5. golang中,new和make的区别

    在golang中,make和new都是分配内存的,但是它们之间还是有些区别的,只有理解了它们之间的不同,才能在合适的场合使用. 简单来说,new只是分配内存,不初始化内存: 而make即分配又初始化内 ...

  6. golang中数组指针与指针数组的区别实现

      指针数组和数组的指针,指的是两个不同的东西. 指针数组是有指针组成的数组,数组的指针是一个数组的指针. package main import "fmt" const MAX ...

  7. Go实战--golang中使用JWT(JSON Web Token)

    http://blog.csdn.net/wangshubo1989/article/details/74529333 之前写过关于golang中如何使用cookie的博客: 实战–go中使用cook ...

  8. golang中Context的使用场景

    golang中Context的使用场景 context在Go1.7之后就进入标准库中了.它主要的用处如果用一句话来说,是在于控制goroutine的生命周期.当一个计算任务被goroutine承接了之 ...

  9. 说说不知道的Golang中参数传递

    本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为.在golang中存在着m ...

随机推荐

  1. jmeter+ant 实现自动化接口测试环境配置

    前置:安装jdk 1.8以上 一.安装jemeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 1.1 解压jmeter,放在某个目录,例如D ...

  2. cssfloat布局以及其他小技巧

    css float 布局以及其他小技巧总结 这篇博文 前面四个部分是关于css 经典布局 如果你已经知道了 可以直接跳过看第六部分 css 的其他小技巧 1.0 左右居中布局 <!DOCTYPE ...

  3. java阻塞队列得实现

    阻塞队列与普通队列的不同在于.当队列是空的时候,从队列中获取元素的操作将会被阻塞,或者当队列满时,往队列里面添加元素将会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插 ...

  4. 简单配置prometheus

    一,物理节点安装配置(简单配置,未涉及报警及grafana图形展示) 1,prometheus 官网下载安装 下载安装 # pwd /usr/local/src https://github.com/ ...

  5. K8S简介

    简介 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规 ...

  6. SpringBoot项目的几种创建方式,启动、和访问

    最常用的4种方式,但除了这些以外,还有其他方式: ①在线创建 ②STS构建 ③Intell  Idea内置构建工具 ④Maven创建 STS官网:https://start.spring.io  .S ...

  7. 挖矿病毒DDG的分析与清除

    注:以下所有操作均在CentOS 7.2 x86_64位系统下完成. 今天突然收到“阿里云”的告警短信: 尊敬的****:云盾云安全中心检测到您的服务器:*.*.*.*(app)出现了紧急安全事件:挖 ...

  8. 监听浏览器返回键、后退、上一页事件(popstate)操作返回键

    在WebApp或浏览器中,会有点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面.确认离开页面或执行一些其它操作的需求.可以使用 popstate 事件进行监听返回.后退.上一页操作. 一 ...

  9. 条形码(barcode)code128生成代码

    条形码(barcode)code128生成代码 很简单 多些这位兄弟https://bbs.csdn.net/topics/350125614 下面是我的DEMO 直接放到VS2005下面编译即可 # ...

  10. gsensor架构和原理分析【转】

    本文转载自:http://blog.csdn.net/u012296694/article/details/48055491 本文主要描述了在android2.3平台G-sensor相关软硬件的体系架 ...