golang并发编程实践 -- 简单生产者消费者(with chan)

<!-- #code {width:100%; margin:10px 0 0 0; padding:10px; border:1px solid #785; background:#f5f5f5; font-family:"monospace"; font-size:14px} --> 本文简单介绍如何用golang实现经典的生产者消费者模型。 golang语法简洁,凡可以通过几行代码解决的事情,绝不为了解决该问题而在语言中引入不必要的特性。这个和c++正好相反,c++是...阅读全文

2012-12-21 20:00 aura521521
阅读:8457 评论:0

用go和zk实现一个简单的分布式server

golang的zk客户端 最近打算写个简单的配置中心,考虑到实现便捷性,语言选择了go,由于其中计划用到zk,就调研了下golang的zk客户端,并实现了个简单的分布式server。最终找到了两个,地址如下: gozk:https://wiki.ubuntu.com/gozk go-zookeeper:https://github.com/samuel/go-zookeeper 由于gozk的文档不如后者,且代码没在gihub上,所以就直接选择了后者。go-zookeeper文档还是比较全面的:...阅读全文

2016-07-09 23:34 good-temper
阅读:6860 评论:1

golang 热更新技巧

## 序言 Golang标准库的http部分提供了强大的web应用支持,再加上negroni等中间件框架的支持,可以开发高性能的web应用(如提供Restful的api服务等)。 通常这些web应用部署在多台Linux操作系统的应用服务器上,并用Nginx等做为反向代理,实现高可用的集群服务。当应用版本升级时,如何实现比较优雅的多态服务器的版本更新呢? ## 问题分析 Web应用的更新,我觉得可能需要考虑几个方面的问题: 1. 编译好的应用二进制文件、配置文件上传到服务器上; 2. 应用服务器能...阅读全文

2017-04-21 10:00:37 lancelotM
阅读:20062 评论:0

如何基于Go搭建一个大数据平台

大家下午好!我是来自七牛云大数据团队的党合萱。今天向大家介绍一下我们是如何基于Go搭建大数据平台的。七牛的大数据的产品——Pandora首先介绍一下七牛的大数据的产品——Pandora,我们的目的是提供简单、高效和开放的大数据平台。图 1 是我们的工作流,提供实时计算和离线计算。我们的数据流实时进来之后可以到下游的实时数据服务,最常见的场景是提供日志搜索和机器性能监控,就是看到的仪表盘(图2),还有就是基于 spark 做一些实时数据分析。 图1图 2图 3图 4 是整个Pandora业务上的架...阅读全文

阅读:15462 评论:1

Golang 反射reflection

反射reflection 反射可大大提高程序的灵活性,使得interface{}有更大的发挥余地 反射使用TypeOf和ValueOf函数从接口中获取目标对象信息 反射会将匿名字段作为独立字段(匿名字段本质) 想要利用反射修改对象状态,前提是interface.data是settable,即pointer-interface 通过反射可以“动态”调用方法 对某一个struct进行反射的基本操作 package main import ( "fmt" "reflect" ) type User s...阅读全文

2017-10-19 09:49 skymyyang
阅读:1907 评论:0

重温一遍数据结构之线性表(golang版)

目的 因为最近工作中碰到了一些关于数据结构的问题,发现有些生疏了,所以想重新自己再理一遍,就当是给自己的记录,之所以用golang主要也是因为对goalng比较感兴趣,写起来也比较顺手。本意也不是想分享关于什么是数据结构,因为这种概念性的东西没有什么太大意义,其实最重要的是让自己能看懂自己写了些什么,但是代码中写了非常详细的注释,所以基本都是以代码为主 线性表之顺序存储结构 以下代码是线性表中的顺序存储结构,基本略去了些容错的考虑,还是以实现功能为主 package main //线性表中的顺序...阅读全文

阅读:1892 评论:0

重温一遍数据结构之单链表(golang版)

说明 上一篇说的是线性表中的顺序存储结构,他的读取复杂度虽然是o(1),但是它的缺点也很明显,插入和删除需要移动很多元素,而且需要分配一块连续的内存区域 线性表之单链表 单链表在一定程度上解决了一部分上面的问题,而且也不要一大块连续的内存区域,代码如下 package main //线性表中的链式存储结构 //第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表 import ( "fmt" ) type Elem int type LinkNode struct { Data Ele...阅读全文

2017-11-20 00:04:58 woshicixide
阅读:8045 评论:0

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

https://arslan.io/2017/09/14/the-ultimate-guide-to-writing-a-go-tool/作者:Fatih Arslan译者:oopsguy.com 我之前编写过一个叫 gomodifytags 的工具,它使我的生活变得很轻松。它会根据字段名称自动填充结构体标签字段。让我来展示一下它的功能: 使用这样的工具可以很容易管理结构体的多个字段。该工具还可以添加和删除标签、管理标签选项(如 omitempty)、定义转换规则(snake_case、came...阅读全文

阅读:2558 评论:0

golang 并发编程之生产者消费者

golang 最吸引人的地方可能就是并发了,无论代码的编写上,还是性能上面,golang 都有绝对的优势 学习一个语言的并发特性,我喜欢实现一个生产者消费者模型,这个模型非常经典,适用于很多的并发场景,下面我通过这个模型,来简单介绍一下 golang 的并发编程 go 并发语法 协程 go 协程是 golang 并发的最小单元,类似于其他语言的线程,只不过线程的实现借助了操作系统的实现,每次线程的调度都是一次系统调用,需要从用户态切换到内核态,这是一项非常耗时的操作,因此一般的程序里面线程太多会...阅读全文

2018-03-11 19:34:41 hatlonely
阅读:4448 评论:0

Go 中的任务队列

在 [RapidLoop](https://www.rapidloop.com/) 中,我们几乎用 [Go](https://golang.org) 做所有事情,包括我们的服务器,应用服务和监控系统 [OpsDash](https://www.opsdash.com/)。 Go 十分擅长编写异步程序 - goroutine 和 channel 使用十分简单不容易出错并且和其他语言相比异步/等待模式,语法和功能都更加强大。请继续阅读来瞧瞧围绕任务队列的一些有趣的 Go 代码。 ## 不...阅读全文

2018-03-19 10:51:44 saberuster
阅读:11974 评论:4

记一次docker容器化部署

事情是这样的 一个人程序员,用golang写了个server,写完后...不会部署 : ) 是的,这个人就是我... 今天真的是要被自己笑死 终于有机会在公司项目中使用golang进行开发,整个开发过程相当亢奋!然而...当跟前端小哥哥联调完接口后,小哥哥问我什么时候能给线上地址 (一脸懵)忘记还有上线这回事了 往往自己业余写的golang项目就直接 go build 然后拖到服务器然后运行一下搞定 但是这是公司项目啊!!! 会给你ftp??? 你可以碰到服务器??? (仿佛听到了DBA小哥哥的...阅读全文

2018-04-11 00:34:38 holdno
阅读:4117 评论:2

Go Protobuf 资源的可读化

工作上有大量协议采用 Google Protocol Buffer,关于 Protobuf 的简单介绍可以看 IBM 的《Google Protocol Buffer 的使用和原理》这篇介绍。简单来说,Protobuf 的优点是(相比 XML)更小、更快、更简单,同时可以向后兼容。缺点的话,对我日常工作影响比较大的就是可读性较差,因为 Protobuf 压缩的时候会做序列化,生成 pb 文件,这个文件是二进制的,无法做到 human readable。但在日常工作中,尤其是排查问题是,经常需要看...阅读全文

2018-09-18 15:34:45 findingea
阅读:1500 评论:0