Golang之bytes.buffer学习笔记

bytes.buffer是一个缓冲byte类型的缓冲器存放着都是byte Buffer 是 bytes 包中的一个 type Buffer struct{…} A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is an empty buffer ready to use. (是一个变长的 buffer,具有 Read 和Write 方法。 Buf...阅读全文

2016-02-29 22:07 luomoshusheng
阅读:15497 评论:0

Go计算运行的时间

函数time.Since() 计算golang运行的时间是非常有用的性能衡量指标,特别是在并发基准测试中。下面将介绍如何简单地使用Go语言来计算程序运行的时间。 简单地使用Golang的time.Since()函数即可。下面有一个完整例子展示这个用法。 package main import ( "fmt" "time" ) func StartCac() { t1 := time.Now() // get current time //logic handlers for i := 0; i ...阅读全文

阅读:14404 评论:0

golang sync.WaitGroup解决goroutine同步

go提供了sync包和channel来解决协程同步和通讯。新手对channel通道操作起来更容易产生死锁,如果时缓冲的channel还要考虑channel放入和取出数据的速率问题。 从字面就可以理解,sync.WaitGroup是等待一组协程结束。它实现了一个类似任务队列的结构,你可以向队列中加入任务,任务完成后就把任务从队列中移除,如果队列中的任务没有全部完成,队列就会触发阻塞以阻止程序继续运行。 sync.WaitGroup只有3个方法,Add(),Done(),Wait()。 其中Done...阅读全文

2016-12-10 19:00:06 黑神领主
阅读:10085 评论:0

golang模拟点击浏览器

发现一个很好玩的浏览器模拟操作包,下面演示一下,打开网站,点击某个链接 package main import ( "fmt" "time" "github.com/go-vgo/robotgo" "sourcegraph.com/sourcegraph/go-selenium" ) func main() { var webDriver selenium.WebDriver var err error caps := selenium.Capabilities(map[string]inter...阅读全文

2017-09-11 11:41 YiYou.Org
阅读:18842 评论:5

如何用golang实现一个定时器任务队列

golang中定时器 golang中提供了2种定时器timer和ticker(如果JS很熟悉的话应该会很了解),分别是一次性定时器和重复任务定时器。 一般用法: func main() { input := make(chan interface{}) //producer - produce the messages go func() { for i := 0; i < 5; i++ { input <- i } input <- "hello, world" }() t1 := time....阅读全文

2018-05-23 01:33:04 o0无忧亦无怖
阅读:14078 评论:2

使用 defer 的运行时开销

在 Go 语言中有一个特殊的关键字 `defer`。对于它更多的介绍请看[这里](https://blog.golang.org/defer-panic-and-recover)。`defer` 语句会把一个函数追加到函数调用列表。这个列表会在函数返回的时候依次调用。`defer` 常用来进行各种清理操作。 但是 `defer` 本身是有开销的。使用 Go 的基准测试工具我们可以量化这种开销。 下面两个函数做同样的工作。一个使用 `defer` 语句而另一个不使用: ```go...阅读全文

2018-05-27 21:57:21 saberuster
阅读:1368 评论:2

Go 采用 time.After 实现超时控制

场景: 假设业务中需调用服务接口A,要求超时时间为5秒,那么如何优雅、简洁的实现呢? 我们可以采用select+time.After的方式,十分简单适用的实现。 首先,我们先看time.After()源码: // After waits for the duration to elapse and then sends the current time // on the returned channel. // It is equivalent to NewTimer(d).C. // The...阅读全文

2018-05-29 19:34:38 舆图易稿
阅读:7695 评论:2

简简单单说个闭包

闭包的作用 一句话,闭包的作用:将方法存于变量。 至于闭包的原因或者目的,或者说,为什么将方法存于变量,稍后再说。 闭包的条件 为了尽量避免用一大段话描述一个概念,我们理性一点地把闭包的条件划分成3个: 外函数中定义了一个内函数 内函数用了外函数的变量 外函数返回了内函数的引用,or,外函数中直接调用了内函数 P.S. 其中外函数和内函数是指嵌套函数中外部函数和内部函数 也正是因为需要嵌套函数,因此不支持的嵌套函数的语言也自然不支持此类闭包 条件3中分成了两类,更多的情况下是前一类,而后一类(外...阅读全文

2018-05-29 22:34:38 煎鱼煎鱼
阅读:728 评论:0

Golang 微服务教程(三)

译文链接:wuYin/blog原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。 本文完整代码:GitHub 在上节中,我们使用 go-micro 重新实现了微服务并进行了 Docker 化,但是每个微服务都要单独维护自己的 Makefile 未免过于繁琐。本节将学习 docker-compose 来统一管理和部署微服务,引入第三个微服务 user-service 并进行存储数据。 MongoDB 与 Postgres 微服务的数据存储 到目前为止,c...阅读全文

2018-06-07 09:34:37 wuYin
阅读:2929 评论:0

用Golang撸了个文件监测、同步小工具

本文最早发布于 Rootrl's Blog 缘起 我们公司开发环境很特殊,一台本地服务器,然后分配多个ssh账户给开发者。平时上传代码只能ftp/sftp连接上传(以前用过samba共享,但被关了。。)。所以我们平时是在Phpstorm上用sftp远程打开服务器上的项目,然后设置自动上传。这样一般工作没问题。但是有个坑:Phpstorm无法捕获类似git checkout这些更改文件的变化。。所以也就无法让本地代码跟服务器保持一致了。所以也就诞生了想写个这个同步机制的念头,这种场景Golang很...阅读全文

2018-06-07 21:34:36 rootrl
阅读:6391 评论:1

gracehttp: 优雅重启 Go 程序(热启动)

问题背景 在 http 应用程序重启时,如果直接 kill -9 使程序退出,然后在启动,会有以下几个问题: 旧的请求未处理完,如果服务端进程直接退出,会造成客户端链接中断(收到 RST); 新请求打过来,服务还没重启完毕,造成 connection refused 这些问题会造成不好的客户体验,严重的甚至影响客户业务。所以,我们需要优雅的重启我们的应用。 解决问题 -- 优雅 Github: gracehttp 原理 信号机制; 子进程继承父进程的资源; 支持功能 平滑重启(Zero-Down...阅读全文

阅读:3651 评论:0

图解Golang的内存分配

## 一般程序的内存分配 在讲Golang的内存分配之前,让我们先来看看一般程序的内存分布情况: ![](https://i6448038.github.io/img/go_mem/mem.png) 以上是程序内存的逻辑分类情况。 我们再来看看一般程序的内存的真实(真实逻辑)图: ![](https://i6448038.github.io/img/go_mem/mem1.png) ## Go的内存分配核心思想 Go是内置运行时的编程语言(runti...阅读全文

2019-06-10 14:18:00 RyuGou
阅读:757 评论:0

译文:Go 内存分配器可视化指南

译文:Go 内存分配器可视化指南 Sat 23 February 2019 当我第一次开始尝试理解 Go 语言的内存分配器时,整个过程让我抓狂。一切看起来都像一个神秘的黑盒子。因为几乎所有技术魔法(technical wizardry)都隐藏在抽象之下,所以你需要一层一层的剥离才能去理解它。 我们将通过这篇文章来一层层的剥离这些细节。如果你想学习所有关于 Go 内存分配器的知识,那么这篇文章正适合你。 物理内存和虚拟内存 每一个内存分配器都需要运行在由底层操作系统管理的虚拟内存空间(Virtua...阅读全文

2019-06-10 15:49 www.linuxzen.co 等
阅读:1472 评论:0

20.性能优化

在计算机性能调试领域里,profiling 是指对应用程序的画像,画像就是应用程序使用 CPU 和内存的情况。 Go语言是一个对性能特别看重的语言,因此语言中自带了 profiling 的库,这篇文章就要讲解怎么在 golang 中做 profiling。 Go性能优化 Go语言项目中的性能优化主要有以下几个方面: CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据 Memory Profile(Heap Profile):报告程序的内...阅读全文

2020-04-30 21:32:54 雪上霜
阅读:1749 评论:0

工作流一目了然,看小姐姐用动图展示 10 大 Git 命令

转自机器之心 https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1 git merge、git rebase、git reset、git revert、git fetch、git pull、git reflog…… 你知道这些 git 命令执行的究竟是什么任务吗?如果你还有些分不清楚,那千万不能错过这篇文章。在本文中,熟知 JavaScript、TypeScript、GraphQL、Serverless、AWS、Doc...阅读全文

2020-05-21 19:33:20 迷失的帆板
阅读:928 评论:0

Golang正则表达式

语法规则 字符类匹配表达式 语法 说明 示例 匹配结果 一般 匹配本身 abc abc . 匹配任意除换行符"\n"外的字符 a.c abc \ 转义字符,使后一个字符改变原来的意思 a\.c a.c [...] 字符集(字符类),对应的位置可以是字符集中任意字符[abc]。也可以给出范围[a-c],第一个字符如果是 ^ 则表示取反,如 [^abc] 表示除了abc之外的其他字符。 a[bcd]e abe,ace,ade \d 数字:[0-9] a\dc a1c \D 非数字:[^\d] a\D...阅读全文

2020-05-21 19:33:20 也疯狂
阅读:1246 评论:0

Golang——map

Map是无序的、基于key-value的数据结构,内部使用散列表hash实现。 Map是引用类型,声明时是nil,必须初始化才能使用。 map[keytype]valuetype map类型变量默认初始值是nil,需要使用make()函数进行初始化 make(map[keytype]valuetype, [cap]) map声明和初始化 func main() { //声明 var a map[string]int fmt.Println(a == nil) //true //初始化,容量可以写...阅读全文

2020-05-21 23:32:46 Cici冬雪
阅读:528 评论:0

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

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

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