golang的事务操作sync.once

复习复习golang的库函数 type Once struct { m Mutex done uint32 //相当于一个flag值 } func (o *Once) Do(f func()) { //atomic库是原子操作,由汇编代码实现 if atomic.LoadUint32(&o.done) == 1 { return } // Slow-path. //读取o.done值前设置一个锁mutex o.m.Lock() defer o.m.Unlock() if o.done == 0 ...阅读全文

2017-01-16 16:00:09 golang_yh
阅读:2261 评论:0

golang互斥锁跟读写锁

golang中sync包实现了两种锁Mutex (互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的,只读锁的实现使用类似引用计数器的功能. type Mutex func (m *Mutex) Lock() func (m *Mutex) Unlock() type RWMutex func (rw *RWMutex) Lock() func (rw *RWMutex) RLock() func (rw *RWMutex) RLocker() Locker func ...阅读全文

2017-01-18 19:00:17 tree2013
阅读:14264 评论:1

Go和HTTPS

转自 tony bai 近期在构思一个产品,考虑到安全性的原因,可能需要使用到HTTPS协议以及双向数字证书校验。之前只是粗浅接触过HTTP(使用Golang开 发微信系列)。对HTTPS的了解则始于那次自行搭建ngrok服务,在那个过程中照猫画虎地为服务端生成了一些私钥和证书,虽然结果是好 的:ngrok服务成功搭建起来了,但对HTTPS、数字证书等的基本原理并未求甚解。于是想趁这次的机会,对HTTPS做一些深度挖掘。主要途 径:翻阅网上资料、书籍,并利用golang编写一些实验example...阅读全文

2017-01-20 20:10 andylau00j
阅读:11638 评论:0

Canonical 用 Go 做了这五个超酷的项目

前不久,Google 的 Go 问鼎 TIOBE 排行榜,成为 2016 年年度编程语言。Go 因其易学性及务实性受到大家的喜爱。抛开长篇累牍的理论,Go 更注重的是实践经验,因此越来越多的用户将其应用到工业环境中。在 Canonical 中也一样!作为 Go 的支持者,我们用 Go 做了五个超酷的项目: 1、Juju Juju 堪称是“DevOps工作经验的结晶”,能使用 Charms 将应用程序体系结构部署到 EC2,OpenStack,Azure,HP 数据中心,甚至是基于 Ubuntu ...阅读全文

2017-01-25 01:00:09 编辑部的故事
阅读:5023 评论:0

Go 1.8中值得关注的几个变化

在已经过去的2016年,Go语言继在2009年之后再次成为编程语言界的明星- 问鼎TIOBE 2016年度语言。这与Go team、Go community和全世界的Gophers的努力是分不开的。按计划在这个2月份,Go team将正式发布Go 1.8版本(截至目前,Go的最新版本是Go 1.8rc3)。在这里我们一起来看一下在Go 1.8版本中都有哪些值得Gopher们关注的变化。 一、语言(Language) Go 1.8版本依旧坚守Go Team之前的承诺,即Go1兼容性:使用Go 1....阅读全文

二月 3, 2017 bigwhite
阅读:11389 评论:0

Golang 通过 Consul 实现分布式锁

Consul 是什么 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对. 命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品. 一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广...阅读全文

阅读:1939 评论:0

1.9 新特性预览:Logging, interfaces, and allocation

该文翻译自:http://commaok.xyz/post/interface-allocs/几个星期前,Peter Bourgon在golang-dev开了一个关于标准化日志记录的帖子。 日志很常用,因此性能很快提升。 go-kit日志包使用结构化日志,接口如下:type Logger interface { Log(keyvals ...interface{}) error}调用代码:logger.Log("transport", "HTTP", "addr", addr, "msg", "...阅读全文

阅读:2078 评论:0

数据库不适合Docker及容器化的7大原因

导读:所有的服务都开始了容器化升级,在一切皆容器的主流思想下,无状态的服务采用容器化已经是大势所趋,常常困扰架构师的一个问题是,数据库是否需要容器化,本文作者 Mikhail Chinkov 提出了自己否定观点,由高可用架构翻译。如果我们观察 2017 年技术行业,容器和 Docker 依然将是最热门的流行语。我们开始在每个领域的 Docker 容器中打包开发的软件。从小型初创公司到巨大的微服务平台都在使用容器技术。从 CI 平台到 Raspberry Pi 。从数据库到……数据库?您确定要将数...阅读全文

阅读:7794 评论:0

设计模式(golang)

设计模式的六大原则 摘自 Java开发中的23种设计模式详解 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。 所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后 面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substi...阅读全文

阅读:9851 评论:0

Go 1.8 http graceful 体验

很高兴Go 1.8发布了,这是个值得庆祝的日子。 如何优雅的关闭http服务在Go Web开发中一直被提及和讨论的话题,今天Go 1.8的发布终于为我们带来了这个特性。 文档中是这样介绍的: func (srv *Server) Shutdown(ctx context.Context) error Shutdown 将无中断的关闭正在活跃的连接,然后平滑的停止服务。处理流程如下: 首先关闭所有的监听 然后关闭所有的空闲连接 然后无限期等待连接处理完毕转为空闲,并关闭 如果提供了 带有超时的Co...阅读全文

2017-02-17 13:01:03 Coldstar
阅读:4015 评论:0

Go语言:REST Web服务调用

Dynamsoft部署了基于REST的条形码服务。这里分享下如何使用Go语言发送包含BASE64图像数据的HTTP POST请求。 环境配置 IDE: JetBrain Gogland. Go 1.7.4. Windows 10. 工作目录结构: <GOPATH> - src - bin - pkg Go设置: GOROOT=E:\Go GOPATH=g:\gowork 基本步骤 1. 读取图像文件。 2. 把byte数组转换成base64字符串。 3. JSON编码。 4. 通过HTTP PO...阅读全文

2017-02-21 14:00:18 yushulx
阅读:3812 评论:0

Golang语言常用算法

在学习golang语言,文档看的实在是乏味,就想着把常用的算法做个实现,边写变学习,想来效果还是不错的! 1. 堆排序 package main import "fmt" func buildHeap(array []int, length int) { var i, j int; for i = 1; i < length; i = i + 1 { for j = i; j > 0 && array[j] > array[(j-1)/2]; j = (j - 1)/2 { array[j], ...阅读全文

2017-02-22 15:30 wujieyhy2006
阅读:2271 评论:0

基于consul构建golang系统分布式服务发现机制

在分布式架构中,服务治理是一个重要的问题。在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进行服务关系管理,遇到服务关系变化或者增加服务的时候,人肉配置极其麻烦且容易出错。 之前在一个C/C++项目中,采用ZooKeeper进行服务治理,可以很好的维护服务之间的关系,但是使用起来较为麻烦。现在越来越多新的项目采用consul进行服务治理,各方面的评价都优于ZooKeeper,经过几天的研究,这里做一个总结。 zookeeper和consul比较 开发语言方面,zookeeper采...阅读全文

阅读:1609 评论:0

如何用Go实现一款类似滴滴优步的网络约车软件(含源码)

导读:我们经常使用打车软件出行,也经常思考其架构设计。本文作者在所在国家也负责开发一款打车软件,并且开源了其中大部分代码,可以帮助我们更好了解网络约车软件的架构体系。本文由高可用架构翻译。各位读者好,本文将给大家分享我们如何通过内存存储实现地图动画车效果。 我们公司也运营了一个类似 Uber 的软件 Namba Taxi,我们需要在客户端主屏幕上显示动画车。 这篇文章是关于功能如何完整实现的文章,主要目的不是介绍 Go 语言。开始这个故事始于2015年,我们的移动开发人员开发一款软件,工作主题是...阅读全文

阅读:7321 评论:0

从Go谈到socket API的一些思考

本文翻译自:https://idea.popcount.org/2017-02-23-socket-api-thoughts/前一段时间,我写了篇关于select()系统调用发展历史的文章。 该文章引发了一些有趣的讨论。文章和讨论花了我不少心思,但我最终明白了什么是核心问题:Unix进程是否是CSP风格的进程? 文件描述符是CSP派生的“通道”吗? “select()”相当于ALT语句吗?直接的答案是“不”。 CSP比Unix更年轻。 正如Tony Garnock-Jones指出的,关于CSP的...阅读全文

阅读:1786 评论:0

使用 Elastic Stack 来监控和调优 Golang 应用程序

Golang 因为其语法简单,上手快且方便部署正被越来越多的开发者所青睐,一个 Golang 程序开发好了之后,势必要关心其运行情况,今天在这里就给大家介绍一下如果使用 Elastic Stack 来分析 Golang 程序的内存使用情况,方便对 Golang 程序做长期监控进而调优和诊断,甚至发现一些潜在的内存泄露等问题。 Elastic Stack 其实是一个集合,包含 Elasticsearch、Logstash 和 Beats 这几个开源软件,而 Beats 又包含 Filebeat...阅读全文

2017-03-03 medcl
阅读:1333 评论:1

Golang1.7 Goroutine源码分析

一、 Golang简介 1.1概述 Golang语言是Google公司开发的新一代编程语言,简称Go语言,Go 是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有弹性的模块化程序。 Go 编译到机器码非常快速,同时具有便利的垃圾回收和强大的运行时反射。而他最广为人知的特性便是语言层面上对多核编程的支持,他有简单的关键字go来实现并行,就像下面这样: Go的并行单元并不是传统意义上的线程,线程切换需要很大的上下文,这种切换消耗了大量CPU时间,而...阅读全文

2017-03-07 23:00:53 tantexian
阅读:765 评论:0

Golang RPC 之 gRPC

gRPC 简介: gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等)。因为 gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景。gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP2 stream 的特性,从而有助于节省带宽、降低 TCP 的连接次数、节省CPU的使用等。 安装: gRPC 的安装 $ ...阅读全文

2017.03.08 17:32* 谢烟客
阅读:1661 评论:0