Stack Traces In Go

Introduction Having some basic skills in debugging Go programs can save any programmer a good amount of time trying to identify problems. I believe in logging as much information as you can, but sometimes a panic occurs and what you logged is not eno...阅读全文

January 11, 2015 William Kennedy
阅读:2844 评论:0

go语言实现stack

golang package stack import ( "errors" ) type Stack []interface{} func(stack *Stack) Push(v interface{}) { *stack = append(*stack, v) } func(stack *Stack) Pop() (interface{}, error){ if len(*stack) == 0 { return nil, errors.New("stack empty") } v := ...阅读全文

2015-05-12 08:10 guonaihong
阅读:4067 评论:0

Go语言atomic原子操作

atomic是最轻量级的锁,在一些场景下直接使用atomic包还是很有效的。 下面内容摘秒自《GO并发编程实战》—— 原子操作: CAS操作的优势是,可以在不形成临界区和创建互斥量的情况下完成并发安全的值替换操作。 这可以大大的减少同步对程序性能的损耗。 当然,CAS操作也有劣势。在被操作值被频繁变更的情况下,CAS操作并不那么容易成功。 原子操作共有5种,即:增或减、比较并交换、载入、存储和交换 1. 增或减 被用于进行增或减的原子操作(以下简称原子增/减操作)的函数名称都以“Add”为前缀,...阅读全文

2015-03-11 15:44 xcltapestry
阅读:69688 评论:0

golang中net包用法(一)

net包对于网络I/O提供了便携式接口,包括TCP/IP,UDP,域名解析以及Unix Socket。尽管net包提供了大量访问底层的接口,但是大多数情况下,客户端仅仅只需要最基本的接口,例如Dial,LIsten,Accepte以及分配的conn连接和listener接口。 crypto/tls包使用相同的接口以及类似的Dial和Listen函数。下面对net包进行具体分析。 首先介绍其中常量: const ( IPv4len = 4 IPv6len = 16 ) 很容易看出这表示ip地址的长...阅读全文

2015-01-16 20:30 chenbaoke
阅读:12345 评论:0

[go语言]基本数据类型

1 基本数据类型 go的变量类型有以下几种 1)布尔型(bool:1位) 布尔类型只有true和false两个值 2)整型(int) 字节型: byte (相当于int8:1位) 字码型:rune (相当于int32:4位) 有无符号: int unit (无符号加前缀u) 根据位数: int8 int16 int32( int64 3)浮点型(float) 根据位数: float32 float64 4)字符串型(string) string类型是使用双引号""或者反引号``引起来的字符串变量...阅读全文

阅读:2997 评论:0

golang中os包用法

os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chdir(dir string) error //chdir将当前工作目录更改为dir目录. func Getwd() (dir string, err error) //获取当前目录,类似linux中的pwd func Chmod(name string, mode FileMode) error /...阅读全文

阅读:54735 评论:0

golang中archive/zip包用法

archive/zip包提供了zip归档文件的读写操作。 在对zip包进行介绍之前,先说明一下zip和tar的区别。 二者都是对文件进行归档,不进行压缩。并且二者使用平台不同,对于 Windows 平台而言,最常用的格式是 zip 和 rar,国内大多数是用 rar,国外大多数是用 zip。而对于类 Unix 平台而言,常用的格式是 tar 和 tar.gz,zip 比较少一些,rar 则几乎没有。 zip 格式是开放且免费的,所以广泛使用在 Windows、Linux、MacOS 平台,要说 ...阅读全文

2015-11-10 16:54 chenbaoke
阅读:17330 评论:0

Golang runtime 浅析

从Goroot的代码出发,里面有很多代码非常复杂,一点点看吧。最重要的概念就是runtime,golang的程序都是在runtime的基础上运行的(除了与底层直接交互的syscall)。 Runtime 在$goroot/pkg/runtime/中有三个文件非常重要: proc.c stack.h runtime.h 在runtime.h中你能看到许多的数据结构和接口 这里的数据结构就是go中的各种特定的结构对应的底层实现,比如slice: struct Slice { // must not ...阅读全文

2016-07-11 02:00:06 yjf512
阅读:4943 评论:0

[译]Go Stack Trace

William Kennedy写了两篇关于Go 调试的文章,非常不错,特意翻译了一下,加深记忆。本文是其中的一篇: Stack Traces In Go。 另一篇是 Scheduler Tracing In Go。 Stack Trace表示堆栈跟踪,这是一个或多个堆栈帧的有序的集合。在程序出现panic的时候你会看到控制台有Stack Trace信息打印出来。 介绍 拥有基本的调试Go程序技能可以节省程序员很大的时间来发现问题。我当然相信你可以使用log信息来跟踪问题,但是有时候panic发生...阅读全文

2016年04月19日 smallnest
阅读:1102 评论:1

go tool trace goalng调优工具

你想知道你的Go程序在做什么吗? go tool trace 可以向你揭示:Go程序运行中的所有的运行时事件。 这种工具是Go生态系统中用于诊断性能问题时(如延迟,并行化和竞争异常)最有用的工具之一。 在我之前的 博客文章 中,我提到我们在Pusher中使用 go tool trace 来跟踪为何Go垃圾收集器有很长的停顿时间。 在这篇博文中,我更加深入的介绍 go toll trace 。 go tool trace 试用 go tool trace 可以显示大量的信息,所以从哪里开始是个问题...阅读全文

2017-06-09 18:03:16 水露露
阅读:2671 评论:0

golang runtime

golang 写在前面 golang由于其能够支持大量并发运算的特性而广泛地应用于云计算领域。本文对golang的底层进行一个简单的分析与说明。 golang runtime go程序架构图 如上所示是golang程序运行过程中的架构图。 golang程序并没有像java一样自带虚拟机,而是和c类似。每一个go程序都带有一个runtime,runtime负责和底层操作系统交互。 一个go程序运行所经过的几个主要步骤: 调用osinit,操作系统级别的初始化 调用runtime·schedinit...阅读全文

2017.07.15 11:58 bradyjoestar
阅读:1220 评论:0

golang log 包

一、快速使用 Golang的log包短小精悍,可以非常轻松的实现日志打印转存功能。不用多说,log支持并发操作(即协程安全-相对于JAVA中的线程安全而言),其结构定义如下: type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix to write at beginning of each line // 日志行前缀 fla...阅读全文

2018-05-26 23:33:05 易野
阅读:1019 评论:1

Golang定时器陷阱

所谓陷阱,就是它不是你认为的那样,这种认知误差可能让你的软件留下隐藏Bug。刚好Timer就有3个陷阱,我们会讲1)Reset的陷阱和2)通道的陷阱,3)Stop的陷阱与Reset的陷阱类似,自己探索吧。 Reset的陷阱在哪 Timer.Reset()函数的返回值是bool类型,我们看一个问题三连: 它的返回值代表什么呢? 我们想要的成功是什么? 失败是什么? 成功:一段时间之后定时器超时,收到超时事件。 失败:成功的反面,我们收不到那个事件。对于失败,我们应当做些什么,确保我们的定时器发挥作...阅读全文

阅读:1701 评论:0