golang并发与锁

本文我们来学习一下golang里面的并发以及golang的锁机制。 首先我们假设这样一个场景,有两个协程,同时在读写一个数字,分别对其进行递增和递减,代码如下。 func main(){ a := 1 p_a := &a go func(p_a *int){ for i := 1; i < 100000; i++ { *p_a += 1 fmt.Println(*p_a) } }(p_a) go func(p_a *int){ for i := 1; i < 100000; i++ { *p_a...阅读全文

简书 2017.02.27 00:30 bigtom

Neo4j的简单搭建与使用

Neo4j简介 Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。 Neo4j安装(MAC) 下载 下载Neo4j Com...阅读全文

简书 2017.02.26 19:54 就天边

插曲:关于递归

1 概述 循环与递归是算法中最常见的控制过程的方法,循环自不必说,只要学过计算机语言,必然都会讲这种控制结构;而对于递归,大家也能写得很漂亮(树算法中和图算法中使用递归的场景也特别多)。 递归的好处也显而易见,代码体积小,容易维护。然而,递归并不是万能钥匙,特别是当运行环境内存空间有限以及要求高性能的场景。下文首先介绍递归的运行原理,然后用实例说明递归的代价,接着讲解递归如何转换成循环及其限制,最后对本文进行总结。 2 递归的运行原理 这里的递归特指递归函数,递归函数在程序中执行的原理是什么(冯...阅读全文

简书 2017.02.26 18:18 CodingTech

golang配置文件热更新

配置文件热更新是服务器程序的一个基本功能,通过热更新可以不停机调整程序的配置,特别是在生产环境可以提供极大的便利,比如发现log打得太多了可以动态调高日志等级,业务逻辑参数变化,甚至某个功能模块的开关等都可以动态调整。 每种语言都有自己的热更新实现方式,在golang里面我看到了有人采用了一种错误的实现方式,如下: type Config struct { Test1 string `json:"Test1"` Test2 int `json:"Test2"` } var ( config *C...阅读全文

Segmentfault 2017-02-26 11:00:30 石匠

Golang memory model

Introduction The Go memory model specifies the conditions under which reads of a variable in one goroutine can be guaranteed to observe values produced by writes to the same variable in a different goroutine. Happens Before Within a single goroutine,...阅读全文

Segmentfault 2017-02-26 11:00:30 Airy

go语言基本配置

听说go语言性能很高,作为一个喜欢学习新东西的人,就必须去学学(况且也是google出品的)所谓工欲善其事必先利其器,所以环境配置总是免不了的。 安装go 到这里golang中国下载:http://www.golangtc.com/download,下载对应平台的安装包。如果是x86的系统可以就下载i386的,如果是x64的系统,那么就安装amd64的就可以了(宝宝下载了go1.8.windows-amd64.msi。注意有两种版本的压缩包:msi和zip的。zip的是免安装的,解压在配置一些环...阅读全文

Segmentfault 2017-02-26 11:00:30 火蜥蜴

golang解析csv并导入elastic search

今天我们一起来写一个从csv文件将数据导入elastic search的小程序 准备工作 在gopath的src文件夹下创建csv2es文件夹,并创建main.go文件。下载一些csv文件备用 解析命令行参数 首先我们需要使用flag package解析命令行参数,代码如下 func main() { // 解析命令行输入 host := flag.String("host", "http://localhost:9200", "host, e.g. http://localhost:9200"...阅读全文

简书 2017.02.25 16:35 bigtom

Go1.8 html/template 一个行为的变化

在Go1.8的开发过程中有一个提交,标题是: html/template, text/template: clarify template redefinition behavior 描述是: Make two important points clearer: - Giving a template definition containing nothing but spaces has no effect. - Giving a template definition containing ...阅读全文

Segmentfault 2017-02-26 02:00:14 Coldstar

GRPC---Go Quick Start

GRPC DOCUMENT Before you begin Prerequisites Go version gRPC works with Go 1.5 or higher. $ go version For installation instructions, follow this guide: Getting Started - The Go Programming Language Install gRPC Use the following command to install g...阅读全文

开源中国博客 2017-02-24 23:00:10 hutaishi

教你如何让go get畅通无阻

目前golang开发有一些热度,仅仅在github上面就有大量的用go重写的项目或go开发创新项目。 go开发者经常需要使用go get来下载和安装第三方库或软件。经常会碰到go get无法访问,因为这些第三方库或软件或项目对应的网站被墙了。 很多人都是用shadowsocks来翻墙,但是shadowsocks是基于socks5协议的。对于go get并没有什么用处。如果我们能把socks5代理转为http代理,那就可以访问了。 一个牛逼的国人用go开发了一个可以将socks5代理转为http代...阅读全文

开源中国博客 2017-02-24 23:00:10 hutaishi

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

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

Segmentfault 2017-02-24 16:00:44 石匠

golang二进制协议接口映射

在写服务器程序时,特别是业务向的服务(比如游戏服务器),经常会遇到处理许多客户端协议的情况,如果是http服务,那么定义好处理接口,剩下的交给web服务器就可以了。但是二进制协议就没有这么方便了。 通常的自定义二进制协议规则都是固定长度消息头+变长消息体构成,在消息头中会有消息长度,消息id等字段。(基于TCP流式协议),服务器接收到客户端消息后,首先读取消息头,解析得到消息长度,再按照指定长度获取到完整的消息体的二进制数据。 在写具体业务逻辑时,需要面临从网络层获取到的原始数据,怎么映射到内存...阅读全文

Segmentfault 2017-02-24 16:00:43 石匠

[原创]不科学的Go语言开发Android配置教程

GO语言不错呀, 所以作为一个android开发当然要抓住这个机会呀, 来一份Android-GO开发教程吧~~度娘很不给力,找了很多都是需要科学上网去go get golang.org/x/mobile,而且好多都没法正常安装QAQ,最近也买不到VPN了,只能自己想办法了。。。不过还好,开源的魅力就在这,果然有官方的GIT库,有代码的话就可以啦~不废话了,吃个桃子开干~~环境:Centos 7, GOLANG 1.7.4,操作系统无所谓 都是大同小异的~~ STEP 0:安装GO语言环境,gi...阅读全文

简书 2017.02.09 14:40 好大好大鱼

Go context源码解析

在上一篇文章 golang context初探 中,已经初步了解了context的用法以及应用的场景。那么接下来深入到源码中来学习一下context是怎么实现的。 emptyCtx context包的代码很少,一个context.go文件,总共才480行代码,其中还包括大量的注释。context包首先定义了一个Context接口: type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan str...阅读全文

简书 2017.02.11 11:48 天唯

golang context初探

什么是context 从go1.7开始,golang.org/x/net/context包正式作为context包进入了标准库。那么,这个包到底是做什么的呢?根据官方的文档说明: Package context defines the Context type, which carries deadlines, cancelation signals, and other request-scoped values across API boundaries and between proces...阅读全文

简书 2016.12.25 23:28 天唯

golang vim环境搭建

1. 执行以下命令,下载vundle git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 2. 将以下内容保存到~/.vimrc文件中 set nocompatible " be iMproved, requiredfiletype off " required" set the runtime path to include Vundle and initializeset rtp+=~/...阅读全文

简书 2017.02.23 23:01 来二两Docker

Docker学习笔记--Docker常用命令

查看docker信息(version、info) 查看docker版本$docker version 显示docker系统的信息$docker info 对image的操作(search、pull、images、rmi、history) 检索image$docker search image_name 下载image$docker pull image_name 列出镜像列表; -a, --all=false 显示所有镜像; --no-trunc=false 不要截断输出; -q, --quie...阅读全文

简书 2017.02.23 19:47 紫若丹枫

Golang踩坑录-两种方式来读取文件一行所导致的问题

前两天零零碎碎看完了golang的基础,想着找个小项目练练手,可是出现了一个十分棘手的问题我要做的东西是网站路径爆破所以我会从文本字典中把一行行路径读取然后与域名拼接,但是我在跑起程序后出现了问题下面是一个小片段 400 Bad Request-----http://www.xxx.com/channel.asp 400 Bad Request-----http://www.xxx.com/index.asp 404 Not Found-----http://www.xxx.com/admin....阅读全文

简书 2017.02.23 18:50 Akkuman

谢孟军:THE STATE OF GO

本月 17 日,Go 1.8 版本火热发布。相较于以往的版本,Go 1.8 具体有哪些新的特性呢?想必这是不少 Gopher 们热切关注和讨论的问题。作为著名的Golang 布道者,Gopher China 社区创始人,谢孟军早在今年一月的 ECUG Con 上就对 Golang 做出了历史版本的回顾和 1.8 版本的分析,本文就是对他的演讲实录。 谢孟军 Gopher China 社区创始人,著名开源框架 beego 开发者,畅销图书《Go Web 编程》作者,同时有 bat、bee 等开源软...阅读全文

简书 2017.02.23 15:16 七牛云

从Deadlock报错理解Go_channel机制(二)

上一篇主要讨论了无缓冲信道遭遇死锁的几种情况,这篇文章我们继续讨论信道的另一种类型——缓冲信道(buffered channel)。 基本性质 缓冲信道顾名思义,就是带有缓冲区(buffered)的信道。缓冲区作为数据的临时存储区域,可以作为数据的临时存放空间。初始化如下: var ch = make(chan int, 1) make的第二个参数代表缓冲区的长度,也就是说,信道ch在接收到第一个消息的时候不会挂起,它会把消息存到缓冲区中等待接收的goroutine将其提走。如果此时未提走而新的...阅读全文

简书 2017.01.31 18:30 Solonk8