Go性能监控/分析工具:go tool pprof – 碎言碎语

我们可以使用go tool pprof命令来交互式的访问概要文件的内容。命令将会分析指定的概要文件,并会根据我们的要求为我们提供高可读性的输出信息。 在Go语言中,我们可以通过标准库的代码包runtime和runtime/pprof中的程序来生成三种包含实时性数据的概要文件,分别是CPU概要文件、内存概要文件和程序阻塞概要文件。下面我们先来分别介绍用于生成这三种概要文件的API的用法。 CPU概要文件 在介绍CPU概要文件的生成方法之前,我们先来简单了解一下CPU主频。CPU的主频,即CPU内核...阅读全文

2018-01-02 00:00 johng.cn
阅读:3213 评论:0

Go 堆栈的理解

在讲Go的堆栈之前,先温习一下堆栈基础知识。 什么是堆栈?在计算机中堆栈的概念分为:数据结构的堆栈和内存分配中堆栈。 数据结构的堆栈: 堆:堆可以被看成是一棵树,如:堆排序。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。 栈:一种先进后出的数据结构。 这里着重讲的是内存分配中的堆和栈。 内存分配中的堆和栈 栈(操作系统):由操作系统自动分配释放...阅读全文

2018-12-24 18:34:44 jerry
阅读:477 评论:0

总结了才知道,原来channel有这么多用法!

这篇文章总结了channel的10种常用操作,以一个更高的视角看待channel,会给大家带来对channel更全面的认识。 在介绍10种操作前,先简要介绍下channel的使用场景、基本操作和注意事项。 channel的使用场景 把channel用在数据流动的地方: 消息传递、消息过滤 信号广播 事件订阅与广播 请求、响应转发 任务分发 结果汇总 并发控制 同步与异步 ... channel的基本操作和注意事项 channel存在3种状态: nil,未初始化的状态,只进行了声明,或者手动赋值为...阅读全文

阅读:2367 评论:0

Go 问答之如何阅读 Go 源码

我的知乎回答,问题是关于如何阅读 Go 源码。地址。胡扯了些自己的想法。 Go 的源码在安装包的 src/ 目录下。怎么看它的源码呢?直接看吧!没人教的情况下,只能自己撸了。当然,这种内容一般也不会有人教。 怎么撸? Go 源码中,应该可分为与语言息息相关的部分,和官方提供的标准库。与语言实现相关的肯定是最难的,不是那么容易理解。可以先主要看标准库,其他的可以先大概了解下。 先把源码目录整体扫一遍,大概看看涉及了哪些模块,然后再挑自己喜欢的部分进行更深一步的学习与研究。建议每个目录都简单写个 h...阅读全文

2019年08月28日 波罗学
阅读:2346 评论:2

理解 Go 标准库中的 atomic.Value 类型

作者:喵叔 原文:blog.betacat.io/post/golang… 在 Go 语言标准库中,sync/atomic包将底层硬件提供的原子操作封装成了 Go 的函数。但这些操作只支持几种基本数据类型,因此为了扩大原子操作的适用范围,Go 语言在 1.4 版本的时候向sync/atomic包中添加了一个新的类型Value。此类型的值相当于一个容器,可以被用来“原子地"存储(Store)和加载(Load)任意类型的值。 历史起源 我在golang-dev邮件列表中翻到了14年的这段讨论,有用户...阅读全文

阅读:2626 评论:0

12306抢票带来的启示:看我如何用Go实现百万QPS的秒杀系统

本文为开源实验性工程:“github.com/GuoZhaoran/spikeSystem”的配套文章,原作者:“绘你一世倾城”,现为:猎豹移动php开发工程师,感谢原作者的技术分享。 1、引言 Go语言的出现,让开发高性能、高稳定性服务端系统变的容易,与高贵冷艳的Erlang语言不同的是,Go语言简单易学,在高性能服务端架构中的应用越来越广泛。 对于即时通讯(IM系统、消息推送系统等高性能实时通信等)等场景下,Go语言已经被越来越多的用于核心通信模块中。本文内容虽是从秒杀系统谈起,并未直接涉及...阅读全文

2019-10-15 15:32:40 JackJiang
阅读:1279 评论:1

Uber Go 风格指南(译)

博客地址:note.mogutou.xyz/articles/20… Uber Go 风格指南 译文:github.com/Allenxuxu/u… 原文:github.com/uber-go/gui… 简介 风格是指规范代码的共同约定。风格一词其实是有点用词不当的,因为共同约定的范畴远远不止 gofmt 所做的源代码格式化这些。 本指南旨在通过详尽描述 Uber 在编写 Go 代码中的注意事项(规定)来解释其中复杂之处。制定这些注意事项(规定)是为了提高代码可维护性同时也让工程师们高效的使用 ...阅读全文

2019年10月13日 惜朝_
阅读:1679 评论:1

值得收藏的 Go 框架、库和软件中文收录大全

## 背景介绍 awesome-go 是个很优秀的项目,里面收录了很多优秀的用 Go 编写的开源库、框架、软件。 相信很多同学在寻找相关功能库时,会第一时间从这份列表里寻找目标。 截至目前,awesome-go 已经收录了Web框架、机器学习、分布式系统、编译器、物联网、持续集成等方方面面共计 `81` 类大项, `1777` 个用 Go 编写的仓库,很多我们平常开发上所需要的库都能在上面能找到,为我们节省了不少时间。 ## 关于 awesome-go-cn **[aweso...阅读全文

2019-10-15 13:41:33 yinggaozhen
阅读:407 评论:0

Go 资源整理,这里有你想要的💊

嗯~世界上第二好的语言,这里有你可能想要的💊在 GitHub 上稳定更新,觉得不错请点个 Star ❤️ 如转载分享,请保留出处,谢谢 😆 原文地址: https://shockerli.net/post/go... GitHub: https://github.com/shockerli/... 官网: https://golang.org国内官网镜像(访问快~): https://golang.google.cn GitHub: https://github.com/golang/go Wi...阅读全文

2019-11-05 08:32:31 Jioby
阅读:1556 评论:1

第 01 课:初窥 HTTP 服务器

想要学习 Go 语言的 Web 开发,就必须知道如何在 Go 语言中启动一个 HTTP 服务器用于接受和响应来自客户端的 HTTP 请求。虽然 Web 应用协议不止于 HTTP(HyperText Transfer Protocol),还包括常见的 Socket、WebSocket 和 SPDY 等等,但 HTTP 是当下最简单和最常见的交互形式。与其它语言所不同的是,Go 语言的标准库自带了一系列结构和方法来帮助开发者简化 HTTP 服务开发的相关流程。因此,我们不需要依赖任何第三方组件就能构...阅读全文

2019-11-08 11:28:17 Unknwon
阅读:1535 评论:13

走进Golang之编译器原理

为了学好Golang底层知识装逼,折腾了一下编译器相关知识。下面的内容并不会提升你的生产技能点,但可以提高你的装逼指数。请按需阅读! 本文目录速览: 认识 go build 编译器原理 词法分析 语法分析 语义分析 中间码生成 代码优化 机器码生成 总结 认识 go build 当我们敲下 go build 的时候,我们的写的源码文件究竟经历了哪些事情?最终变成了可执行文件。 这个命令会编译go代码,今天就来一起看看go的编译过程吧! 首先先来认识以下go的代码源文件分类 命令源码文件:简单说就...阅读全文

2019年11月14日 大愚Talk
阅读:252 评论:0

语法糖的代价

在 GO 语言中,你可以用少量的代码表达很多东西。您通常可以查看一小段代码并清楚地了解此程序的功能。这在 Go 社区中被称为地道的 GO 代码。保持跨项目代码的一致性需要持续不断地努力。 当我遇到 Go 的部分看起来不像地道 GO 代码时,这通常是有原因的。最近,我注意到 Go 中的接口切片(或抽象数组)工作方式有点怪异。这种怪异有助于理解在 Go 中使用复杂类型会带来一些成本,而且这些[语法糖](https://en.wikipedia.org/wiki/Syntactic_sugar)...阅读全文

2019-12-04 18:12:02 Alex1996a
阅读:605 评论:2

用 70 行 Go 代码击败 C 语言

Chris Penner 最近发布的一篇文章 [Beating C with 80 Lines of Haskell](https://chrispenner.ca/posts/wc) 引发了 Internet 领域内广泛的论战,进而引发了一场用不同语言实现 `wc` 的圣战: - [Ada](http://verisimilitudes.net/2019-11-11) - [C](https://github.com/expr-fi/fastlwc/) - [Common Lisp]...阅读全文

2019-12-11 15:59:46 lxbwolf
阅读:600 评论:0

超详细Go语言源码目录说明

开源项目「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎go home~ 导读 学习Go语言源码的第一步就是了解先了解它的目录结构,你对它的源码目录了解多少呢?今天我整理了一份超详细的Go语言源码目录说明,基于Go1.14版本整理,欢迎收藏~ 目录总览 . ├── AUTHORS ├── CONTRIBUTING.md ├── CONTRIBUTORS ├── LICENSE ├── PATENTS ├── README.boringcrypto.md ├──...阅读全文

2020-04-18 21:32:33 平也
阅读:558 评论:0

Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[2]

image Golang作为一个略古怪而新的语言,有自己一套特色和哲学。从其他语言转来的开发者在刚接触到的时候往往大吃苦头,我也不例外。这篇文章很细致地介绍了Golang的一些常见坑点,读完全篇中枪好多次。故将其转载。由于文章很长,分为上下两部分,第一部分记录初级篇,第二部分记录进阶和高级篇:此为第二部分 目录 初级篇 开大括号不能放在单独的一行 未使用的变量 未使用的Imports 简式的变量声明仅可以在函数内部使用 使用简式声明重复声明变量 偶然的变量隐藏Accidental Variabl...阅读全文

2020-05-25 03:32:47 开发者阿俊
阅读:147 评论:0

年度最佳【golang】map详解

这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。我要说明的是,这里对 map 的基本用法涉及比较少,我相信可以通过阅读其他入门书籍了解。本文的内容比较深入,但是由于我画了各种图,我相信很容易看懂。什么是 map维基百科里这样定义 map:In computer science, an associative array, map, symbol table, or dictionary is an abs...阅读全文

2020-09-09 09:32:35 去去1002
阅读:256 评论:1

GO

WaitGroup 实现并发控制 image.png Add与Done应该放在哪? - Add放在Goroutine外,Done放在Goroutine中,逻辑复杂时建议用defer保证调用 WaitGroup适合什么样的场景? - 并发的Goroutine执行的逻辑相同时,否则代码并不简洁,可以采用其它方式 理解WaitGroup的实现 - 核心是CAS的使用 https://blog.csdn.net/weixin_34259159/article/details/91699572 Done(...阅读全文

2020-09-18 03:32:48 zhuleixiao666
阅读:86 评论:0

Golang标准库——runtime

runtime runtime包提供和go运行时环境的互操作,如控制go程的函数。它也包括用于reflect包的低层次类型信息;参见》reflect报的文档获取运行时类型系统的可编程接口。 Environment Variables 下面的环境变量($name或%name%,这依赖于主机的操作系统)控制go程序的运行时行为。它们的含义和用法可能在各发行版之间改变。 环境变量GOGC设置最初的垃圾收集目标百分比。当新申请的数据和前次垃圾收集剩下的存活数据的比率达到该百分比时,就会触发垃圾收集。默认...阅读全文

2020-10-19 23:32:40 DevilRoshan
阅读:128 评论:0

Golang标准库——regexp

regexp regexp包实现了正则表达式搜索。 正则表达式采用RE2语法(除了\c、\C),和Perl、Python等语言的正则基本一致。 参见http://code.google.com/p/re2/wiki/Syntax。 Syntax 本包采用的正则表达式语法,默认采用perl标志。某些语法可以通过切换解析时的标志来关闭。 单字符: . 任意字符(标志s==true时还包括换行符) [xyz] 字符族 [^xyz] 反向字符族 \d Perl预定义字符族 \D 反向Perl预定义字符族...阅读全文

2020-10-19 23:32:41 DevilRoshan
阅读:100 评论:0