Golang IO包的妙用

背景以一个RPC的协议包来说,每个包有如下结构type Packet struct {    TotalSize uint32        Magic     [4]byte        Payload   []byte        Checksum  uint32 }其中TotalSize是整个包除去TotalSize后的字节数, Magic是一个固定长度的字串,Payload是包的实际内容,包含业务逻辑的数据。Checksum是对Magic和Payload的adler32校验和。编码(...阅读全文

2017-08-03 12:34 xjtuhit
阅读:624 评论:0

Go语言的实时GC——理论与实践

Go语言能够支持实时的,高并发的消息系统,在高达百万级别的消息系统中能够将延迟降低到100ms以下,着一切很大一部分需要归功于Go的高效的垃圾回收系统。 对于实时系统而言,垃圾回收系统可能是一个极大的隐患,因为在垃圾回收的时候需要将整个程序暂停。所以在我们设计消息总线系统的时候,需要小心地选择我们的语言。Go一直在强调它的低延迟,但是它真的做到了吗?如果是的,它是怎么做到的呢? 在这篇文章当中,我们将会看到Go语言的GC是如何实现的(tricolor algorithm,三色算法),以及为什么这...阅读全文

2017-08-22 09:05:10 terasum
阅读:792 评论:1

Go实战--golang中使用HTTPS以及TSL(.crt、.key、.pem区别以及crypto/tls包介绍)

生命不止,继续go go go!!! HTTP与HTTPS 在WWDC 2016上,苹果在发布iOS 9的同时也向开发者传递了一个消息,那就是到2017年1月1日时App Store中所有应用都必须启用 App Transport Security应用程序安全传输协议,从而提升应用和系统安全性。 HTTPS是Hyper Text Transfer Protocol Secure的缩写,相比http,多了一个secure,这一个secure是怎么来的呢?这是由TLS(SSL)提供的。 https和...阅读全文

2017-08-23 17:26 wangshubo1989
阅读:8970 评论:0

快速掌握 Golang context 包,简单示例

预览目录 Context 原理 遵循规则 Context 包 WithCancel 例子 WithDeadline 例子 WithTimeout 例子 WithValue 例子 参考连接 对于 Golang 开发者来说context(上下文)包一定不会陌生。但很多时候,我们懒惰的只是见过它,或能起到什么作用,并不会去深究它。 应用场景:在 Go http 包的 Server 中,每一个请求在都有一个对应的goroutine去处理。请求处理函数通常会启动额外的goroutine用来访问后端服务,比...阅读全文

2017-08-28 01:52 Deepzz's Blog
阅读:2270 评论:0

hex和base32和base64的区别与联系

基本概念 hex也称为base16,意思是使用16个可见字符来表示一个二进制数组,编码后数据大小将翻倍,因为1个字符需要用2个可见字符来表示。 base32,意思是使用32个可见字符来表示一个二进制数组,编码后数据大小变成原来的8/5,也即5个字符用8个可见字符表示,但是最后如果不足8个字符,将用=来补充。 base64,意思是使用64个可见字符来表示一个二进制数组,编码后数据大小变成原来的4/3,也即3个字符用4个可见字符来表示。 用例 看个例子: package main import "f...阅读全文

阅读:1854 评论:0

Go语言实战笔记(十九)| Go Writer 和 Reader

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续笔记。觉得有帮助的话,顺手分享到朋友圈吧,感谢支持。 输入和输出Go Writer 和 Reader接口的设计遵循了Unix的输入和输出,一个程序的输出可以是另外一个程序的输入。他们的功能单一并且纯粹,这样就可以非常容易的编写程序代码,又可以通过组合的概念,让我们的程序做更多的事情。 比如我们在上一篇的Go log日志 http://www.flysn...阅读全文

May 8, 2017 飞雪无情
阅读:664 评论:0

Go 程序的性能优化及 pprof 的使用

Go 程序的性能优化及 pprof 的使用 程序的性能优化无非就是对程序占用资源的优化。对于服务器而言,最重要的两项资源莫过于 CPU 和内存。性能优化,就是在对于不影响程序数据处理能力的情况下,我们通常要求程序的 CPU 的内存占用尽量低。反过来说,也就是当程序 CPU 和内存占用不变的情况下,尽量地提高程序的数据处理能力或者说是吞吐量。 Go 的原生工具链中提供了非常多丰富的工具供开发者使用,其中包括 pprof。 对于 pprof 的使用要分成下面两部分来说。 Web 程序使用 pprof...阅读全文

2017-08-21 10:51 snowInPluto
阅读:2056 评论:1

十条有用的GO技术

十条有用的 Go 技术 这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的一些很微小,但对于许多事情都会有影响。所有这些都仅仅是建议,具体情况具体对待,并且如果有帮助的话务必...阅读全文

2017-08-31 09:41 zhangboyu
阅读:1045 评论:0

用Golang处理每分钟百万级请求

翻译原文链接 转帖/转载请注明出处 原文链接@medium.com 发表于2017/08/30 我在防垃圾邮件,防病毒和防恶意软件领域已经工作了15年,前后在好几个公司任职。我知道这些系统最后都会因为要处理海量的数据而变得非常复杂。 我现在是smsjunk.com的CEO并且是KnowBe4的首席架构师。这两个公司在网络安全领域都非常活跃。 有趣的是,在过去10年里作为一个码农,所有我经历过的网站后台开发用的几乎都是用Ruby on Rails。不要误解,我很喜欢Ruby on Rails并且认...阅读全文

2017-09-07 09:34:55 曼托斯
阅读:1112 评论:0

goroutine和channel对tcp连接消息的收发

在看这篇文章之前,如果你没看过golang利用socket封装数据,那我建议你看下;同样,如果没看过goroutine和channel实现master-worker模式,同样建议你看下并理解之后再来看这篇文章。这篇文章主要是上两篇文章的结合使用。tcp消息的收发我们已经知道,socket是一个抽象层,其本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。所以我们队tcp消息的收发即对socket中几个接口的配合使用来完成...阅读全文

2017.09.20 00:25* 初级赛亚人
阅读:2656 评论:0

Go 终极指南:编写一个 Go 工具

我之前编写过一个叫 **gomodifytags** 的工具,它使我的生活变得很轻松。它会根据字段名称自动填充结构体标签字段。让我来展示一下它的功能: ![在 vim-go 中使用 gomodifytags 的一个示例](http://upload-images.jianshu.io/upload_images/2192094-880be71ebd4d9610.gif?imageMogr2/auto-orient/strip) 使用这样的工具可以很**容易管理**结构体的多个字段。该...阅读全文

2017-10-27 09:53:11 oopsguy
阅读:6285 评论:7

Go 调优技术

## 内存管理 在开始探索 Go 调优技术和工具之前,我们需要先了解一下 Go 内存模型,它可以帮助我们理解内存是如何使用的。 Go 实现的是 _并行的_ [标记-清除垃圾回收器](http://wiki.c2.com/?MarkAndSweep)。在 _传统的_ 标记-清除模型中,垃圾回收器会先让程序停下来(也就是,“stop the world”),然后查找已经失效的对象,并把这些对象清理掉(也就是,释放内存)。因为程序在运行中会移动引用(references),导致垃圾的识别和...阅读全文

2017-12-20 23:38:13 polaris
阅读:9225 评论:2

Golang 中的微服务 - 第一部分

## 介绍 Golang 中的微服务系列总计十部分,预计每周更新。本系列的解决方案采用了 protobuf 和 gRPC 作为底层传输协议。为什么采用这两个技术呢?我花了相当长的时间,才想出并决定采用这个方案。这个方案对开发者来说,非常清晰而简明。我也很乐意把自己在搭建、测试和部署端到端的微服务过程中的心得,分享给想接触这块的朋友们。 在这个教程中,我们将先接触几个基础的概念和术语,然后开始搭建第一个简单的微服务模型。 本系列中,我们将会创建以下服务: - 委托 - 存...阅读全文

2017-12-26 22:20:00 polaris
阅读:28143 评论:15

Golang 中的微服务 - 第二部分 - Docker 和 go-micro

## 简介: Docker 和 go-micro **[在上篇文章中](https://studygolang.com/articles/12060)**,我们大致介绍了如何编写一个基于 `gRPC` 的微服务。在这个部分,我们将涵盖 `Docker` 服务的基础知识,我们也将使用 [go-micro](https://github.com/micro/go-micro) 更新我们的服务,并在文本末尾引入第二个服务。 ## Docker简介 随着云计算的到来和微服务的诞生,服务...阅读全文

2018-01-03 15:53:35 polaris
阅读:11737 评论:11

Golang 中的微服务-第 4 部分-使用 JWT 做认证

在之前的文章里,我们创建了一个用户服务,保存了一些用户。现在我们看下如何在用户服务中安全的保存用户密码,同时,通过微服务写几个功能,来验证用户,发布安全令牌。 注意,我现在已经把我们的服务拆分到几个不同的仓库里。 我觉得这样部署起来容易些。 最开始我打算做成一个单独的仓库,但是发现用 Go 的 dep 管理有点麻烦,有很多冲突。我也会说明下如何独立地运行和测试微服务。 遗憾的是,用这种方法我们就不能用 docker-compose 了。 不过目前用起来还不错。如果你在这方面有什么建议...阅读全文

2018-03-03 20:17:08 ArisAries
阅读:6717 评论:0

Go 程序在 macOS 上的打包功能

这篇文章简单地说明了如何在 macOS 上打包一个 Go 的程序,包括引用或者不引用外部资源。作为一个原生的 Cocoa 程序它是可以下载、安装和运行的。开发过程并不需要 XCode,cgo 或者其他特殊的库文件。 在此文章结尾处,你的 Go 程序将会被打包进一个 `.app` 文件,成为一个拖放安装的只读 DMG 文件。这也适用于其他非 Go 语言的程序。 关于这个端到端的解决方案的主题还有其他很多的指导文章,有的讲的比我想要做的内容多很多,有的又是采用不同的方式,而我想呈现给你的...阅读全文

阅读:7279 评论:2

CentOS7.4 用 gogs 搭建git仓库

Gogs(Go Git Service) 是一款极易搭建的自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。 一、Gogs依赖环境安装Gogs之前需要配置相应的依赖环境,官网介绍的依赖环境如下:1、数据库(选择以下一项):MySQL:版本 >= 5.5.3PostgreSQL或者 什么都不安装 直接使用 SQLite3 或 TiDB2、git(bash):...阅读全文

2018-09-10 11:55:36 我不是九爷
阅读:1927 评论:0

深入理解 sync.RWMutex:解决读者-写者问题

在某个数据需要被多个线程共享访问的时候,会出现读者-写者问题(这里的「问题」是复数形式的,因为读者-写者问题有多个变种)。访问共享数据的线程有两种类型:读者和写者。读者只会读取数据,而写者则是修改它。当写者拥有了访问数据的权限后,其它的线程(不管是读者还是写者)都不能访问这个数据。这种约束的需求在现实中是存在的,比如:当写者不能原子性地修改某个数据(例如数据库)时,在修改完成之前,要读取这个数据的读者要被阻塞,以免读者获取到损坏的数据(脏数据)。对于读者-写者问题的核心,还有很多修订的限制,比如...阅读全文

2018-09-10 22:25:10 polaris
阅读:8201 评论:0

Go 语言的内存管理

这篇博客是我在维尔纽斯的 [Go Meetup](https://www.meetup.com/Vilnius-Golang/events/249897910/) 演讲的总结。如果你在维尔纽斯并且喜欢 Go 语言,欢迎加入我们并考虑作演讲 在这篇博文中我们将要探索 Go 语言的内存管理,首先让我们来思考以下的这个小程序: ```go func main() { http.HandleFunc("/bar", func(w http.ResponseWriter, r *h...阅读全文

阅读:5520 评论:0