Go语言中文网 为您找到相关结果 13

Go 记录日志——log包

Golang's log模块主要提供了3类接口。分别是 “Print 、Panic 、Fatal ”,对每一类接口其提供了3中调用方式,分别是 "Xxxx 、 Xxxxln 、Xxxxf",基本和fmt中的相关函数类似,下面是一个Print的示例: package main import ( "log" ) func main(){ arr := []int {2,3} log.Print("Print array ",arr,"\n") log.Println("Println array",arr) log.Printf("Printf array with item [%d,%d]\n",arr[0],arr[1]) } 会得到如下结果: 2016/12/15 19:46:19 Pri...阅读全文

博文 2016-12-15 13:00:03 吃一堑消化不良

golang 获取当前文件名和行号的方法

golang 的runtime库,提供Caller函数,可以返回运行时正在执行的文件名和行号: func Caller(skip int) (pc uintptr, file string, line int, ok bool) { Caller reports file and line number information about function invocations on the calling goroutine's stack. The argument skip is the number of stack frames to ascend, with 0 identifying the caller of Caller. (For historical reasons ...阅读全文

博文 2016-12-05 04:00:06 Mr_李辉

go实用小技能-自定义log输出格式

我们在使用go开发项目的时候,常常需要使用log包输出日志,go自带的log包默认输入格式为:时间+内容。 其实go还提供了几个很简单的输出选项 const ( Ldate = 1 << iota // 日期: 2009/01/23 Ltime // 时间: 01:23:23 Lmicroseconds // 微秒: 01:23:23.123123. Llongfile // 路径+文件名+行号: /a/b/c/d.go:23 Lshortfile // 文件名+行号: d.go:23 LUTC // 使用标准的UTC时间格式 LstdFlags = Ldate | Ltime // 默认 ) package main import ( "log" ) func main() { Ldef...阅读全文

博文 2016-12-22 09:00:02 dogo_小小人物

GO-log日志封装

Go封装日志: 支持归档输出,一个小时压缩归档一份 最多保留三天的日志 支持日志级别自定义 如果没有指定输出文件默认输出到控制台。 支持输出文件名行号,以及时间、日志界别 如: info 10:08:40.826836 handler.go:81 package logger import ( "fmt" "log" "os" "os/exec" "strings" "time" ) const ( PanicLevel int = iota FatalLevel ErrorLevel WarnLevel InfoLevel DebugLevel ) type LogFile struct { level int logTime int64 fileName string fileFd *o...阅读全文

博文 2016-09-17 09:00:01 gdutliuyun827

编译更小的 Golang 程序

go build -ldflags "-s -w" x.go (go install类似) -s 去掉符号表,然后 panic 的时候 stack trace 就没有任何文件名/行号信息了,这个等价于普通C/C++程序被strip的效果。不推荐使用。 -w 去掉 DWARF 调试信息,得到的程序就不能用 gdb 调试了,如果不打算用 gdb 调试,基本没啥损失。 示例: # go build main.go && ls -l main -rwxr-xr-x 1 Bing.L Bing.L 15054336 Nov 4 08:39 main # go build -ldflags "-s -w" main.go && ls -l main -rwxr-xr-x 1 Bing.L Bing.L ...阅读全文

博文 2014-11-05 03:00:01 bing-l

给golang程序进行一次廋身

golang语言是使用静态编译,但是由golang编译出来的程序确实有点大,我们需要对它进行一次廋身。 作为惯例:我们第一个程序就是经典的Hello world! // hello project main.go package main import ( "fmt" ) func main() { fmt.Println("Hello World!") } 使用go build hello.go 生成可执行文件 hello 使用命令查看大小ll -h-rwxrwxr-x 1 root root 2.4M May 28 19:54 hello 居然高大2.4MB。 Go语言是静态编译,但是这个也太大了吧。 我们提供一个给程序廋身的方法。 使用命令:go build -ldflags "-s ...阅读全文

博文 2014-10-04 19:26:07 codemanship

go语言 日志格式输出

go语言日志输出 // Bits or'ed together to control what's printed. // There is no control over the order they appear (the order listed // here) or the format they present (as described in the comments). // The prefix is followed by a colon only when Llongfile or Lshortfile // is specified. // For example, flags Ldate | Ltime (or LstdFlags) produce, // 2009...阅读全文

博文 2017-06-05 09:03:22 koalaone

把Go程序变小的办法

go build -ldflags "-s -w" (go install类似) 解释一下参数的意思: -ldflags: 表示将后面的参数传给连接器(5/6/8l) -s:去掉符号信息(然后panic时候的stack trace就没有任何文件名/行号信息了,这个等价于普通C/C++程序被strip的效果) -w:去掉DWARF调试信息。得到的程序就不能用gdb调试了 如下demo.go [AppleScript] 纯文本查看 复制代码 1 2 3 4 5 package main import("fmt") func main(){ fmt.Print("hellow!") } E:\go build demo.go //编译后为1163 K E:\go build -ldflags "-...阅读全文

博文 2016-04-10 14:00:22 hikelee

golang 编译后文件变小的方法

采用:go build -ldflags "-s -w" 这种方式编译。 解释一下参数的意思: -ldflags: 表示将后面的参数传给连接器(5/6/8l) -s:去掉符号信息 -w:去掉DWARF调试信息 注意: -s 去掉符号表(这样panic时,stack trace就没有任何文件名/行号信息了,这等价于普通C/C+=程序被strip的效果) -w 去掉DWARF调试信息,得到的程序就不能用gdb调试了 两个可以分开使...阅读全文

博文 2019-01-02 18:34:46 天崖人

golang错误处理优化

一般条件下golang的错误处理模式如下: err := ... if err != nil { //打印或者退出 } 这种模式可以打印出错误,但是很难查找错误的文件或者位置,可以写一个公用的检查错误函数处理,如下: func CheckError(err error) bool { if err != nil { _, file, line, ok := runtime.Caller(1) if ok { emsg := fmt.Sprintf("file:%s, line:%d, error:%s", file, line, err.Error()) logger.Print(emsg) } else { logger.Print(err) } return true } return ...阅读全文

博文 2020-01-19 23:32:48 hewolf

golang自定义一个简洁而强大的错误追踪包

一. 前言 1.1 错误追踪需要了解的信息 错误提示语 错误的位置, 如:具体的文件名,错误行号和错误方法等. 1.2 实际情况 golang自带了错误信息包error 只提供了简单的用法, 如errors.New(),和errors.Error()用来传递和获取错误信息. 明显官方的包已经不能满足了, 只能采取其他方法补救, 如: 扩充官方包 自定义错误包 ...... 更多内容, 请查看 https://segmentfault.com/a/119000002073565...阅读全文

博文 2019-10-18 21:32:46 aside section ._1OhGeD