GO 语言五步让你成为高手

这里是GO程序员的五个进化阶段: 第一个阶段(菜逼): 刚刚学习了这门语言。 已经通过一些教程或者培训班了解基本的语法,可以写短的代码片段。 第二个阶段 (探索者): 可以写一个完整的程序,但不懂一些更高级的语言特征,比如“channels”。还没有使用GO写一个大项目。 第三个阶段(大手): 你能熟练的使用Go, 能够用GO去解决,生产环境中一个具体和完整的问题。已经形成了一套自己的惯用法和常用代码库。在你的编码方案中Go是一个非常好用的工具。 第四阶段 (大神): 绝逼清楚Go语言的设计选...阅读全文

2016-08-06 00:24 yueguanyun
阅读:4505 评论:0

go web开发之url路由设计

概述 最近在搞自己的go web开发框架, 反正也没打算私藏, 所以现在先拿出url路由设计这块来写一篇博客. 做过web开发的都知道, 一个好的url路由可以让用户浏览器的地址栏总有规律可循, 可以让我们开发的网站更容易让搜索引擎收录, 可以让我们开发者更加方便的MVC. 我们在使用其他web开发框架的时候, url路由肯定也会作为框架的一个重点功能或者说是一个宣传”卖点”. 所以说, 一个web框架中url路由的地位还是非常重要的. 回到go web开发中, 那如何用go来实现一个url路由...阅读全文

2016-09-21 22:36 qibin0506
阅读:9828 评论:0

妙用GO信道(channel)

channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一些有趣的用法。 这里有 Oling Cat 翻译的Go编程语言规范里关于 channel(信道)的描述: 信道提供了一种机制,它在两个并发执行的函数之间进行同步,并通过传递(与该信道元素类型相符的)值来进行通信。 这个个描述又乏味、又枯燥。在我第一次阅读的时候,完全不明白这到底是个什么玩意。...阅读全文

2017-03-14 14:00:55 云迹
阅读:16419 评论:0

如果你用Go,不要忘了vet

go tool vet是你的好朋友,不要忽视它。vet是一个优雅的工具,每个Go开发者都要知道并会使用它。它会做代码静态检查发现可能的bug或者可疑的构造。vet是Go tool套件的一部分,我们会在以后的文章中详细描述tool套件。它和go编译器一起发布,这意味着它不需要额外的依赖,可以很方便地通过以下的命令调用:$ go tool vet <directory|files>本文中所有的go代码段可以正常编译。这使得go vet有价值:它可以在编译阶段和运行阶段发现bug。同时也注意,本文中的...阅读全文

阅读:44505 评论:2

golang使用Nsq

为什么要使用Nsq 最近一直在寻找一个高性能,高可用的消息队列做内部服务之间的通讯。一开始想到用zeromq,但在查找资料的过程中,意外的发现了Nsq这个由golang开发的消息队列,毕竟是golang原汁原味的东西,功能齐全,关键是性能还不错。其中支持动态拓展,消除单点故障等特性, 都可以很好的满足我的需求 下面上一张Nsq与其他mq的对比图,看上去的确强大。下面简单记录一下Nsq的使用方法 golang2017开发者大会 Nsq服务端 Nsq服务端简介 在使用Nsq服务之前,还是有必要了解一...阅读全文

2017.04.24 19:42* 喵喵小魔王
阅读:12009 评论:0

Go语言第一深坑 - interface 与 nil 的比较

# interface简介 Go语言以简单易上手而著称,它的语法非常简单,熟悉C++,Java的开发者只需要很短的时间就可以掌握Go语言的基本用法。 interface是Go语言里所提供的非常重要的特性。一个interface里可以定义一个或者多个函数,例如系统自带的io.ReadWriter的定义如下所示: ```go type ReadWriter interface { Read(b []byte) (n int, err error) Write(b []...阅读全文

2017-08-14 12:03:01 xiaonanln
阅读:15657 评论:17

NSQ的重塑之路

在 Gopherchina 2017 中,杭州有赞科技的李文带来了题为《NSQ 重塑之路》的分享,以下是对他演讲内容的整理。今天我会分享有赞 NSQ 重塑的一个过程,主要分为以下几个部分:第一,回顾旧的架构;第二,在使用的过程中遇到的一些问题,以及为什么要做重构;第三,重构具体的细节和架构;第四,测试的整个流程。第五,与其他产品进行对比;第六,有赞的使用场景。Original Architecture Overview首先,什么是 MQ?MQ 大多数在微服务或者一些业务之间的消息投递过程。一般情...阅读全文

阅读:10526 评论:0

go微服务系列之一

如何编写一个微服务?这里用的是go的微服务框架go micro,具体的情况可以查阅:http://btfak.com/%E5%BE%AE%E6%9C%8D%E5%8A%A1/2016/03/28/go-micro/ 这里给出的是开发一个微服务的步骤(如果想直接查阅源码或者通过demo学习的,可以访问[ricoder_demo](https://gitee.com/xi_fan/ricoder_demo)。): 1、书写proto文件,定义函数等 具体实现: ```protob...阅读全文

2017-10-14 11:18:43 wiatingpub
阅读:3012 评论:0

go微服务系列之二

这是使用gomicro开发微服务系列的第二篇,在上一篇中我只是使用了user-srv和web-srv实现了一个demo,在这里我将实用consul实现服务发现。如果想直接查阅源码或者通过demo学习的,可以访问[ricoder_demo](https://github.com/wiatingpub/demo)。 如何编写一个微服务?这里用的是go的微服务框架go micro,具体的情况可以查阅:http://btfak.com/%E5%BE%AE%E6%9C%8D%E5%8A%A1/201...阅读全文

2017-10-16 10:06:15 wiatingpub
阅读:1329 评论:0

阿里云基于 Go 的微服务架构分享

作者介绍花名聪心,阿里云技术专家,主要负责阿里云OpenAPI,Services architectre 技术服务的实现。云产品前端架构众所周知,阿里是以 Java 开发为主,最近引用 GO 在微服务架构上面进行开发,本次分享也是围绕这个主题进行叙述。图 1图 1 所示,是我们最早期的前端微服务架构图,当时不存在API网关服务、天象全链路监控以及外部服务这几个模块,并且蓝色这部分也并没有被应用起来。因此进行了一场微服务重构过程,产生了最新的前端微服务架构图(图 2)。图 2图 2 是目前的前端微...阅读全文

阅读:7397 评论:1

golang 字符串常用操作(go练习代码)

练习golang string常用操作,备份 类型转换 比较对比 搜索 查找 统计 替换 删除过滤 大小写转换 前缀后缀 字符串分割 拼接 3中拼接字符串方式对比 func main() { fmt.Println("字符串测试") fmt.Println("字符串转化") //获取程序运行的操作系统平台下 int 类型所占的位数,如:strconv.IntSize。 //strconv.IntSize fmt.Println("将字符串转换为 int 型。") var trastr01 str...阅读全文

2017.10.17 12:17* 正为疯狂
阅读:22066 评论:0

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

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

阅读:15468 评论:1

Git使用教程,最详细,最傻瓜,最浅显,真正手把手教

(预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 工作原理 / 流程: Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送...阅读全文

2017-09-20 11:31:42 蘇小小
阅读:4334 评论:2

Go 中锁的使用

> > 本文对Go中锁机制的进行简单介绍 Go中锁分为两种: * 互斥锁 * 读写锁 --- 互斥锁 --- 并发程序对公共资源访问的限制最常见的就是使用互斥锁的方式。在Go中,sync.Mutex 提供了互斥锁的实现。 简单使用示例: func main () { var mutex sync . Mutex count := 0 for r := 0 ; r < 50 ; r ++ { go func () { mutex . Lock () count += 1 mutex ...阅读全文

2017-11-18 18:47:03 薛锦
阅读:25382 评论:0

深入理解Go 1.9 sync.Map

Go官方的faq已经提到内建的map不是线程(goroutine)安全的。在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题,所以go 1.9之前的解决方案是额外绑定一个锁,封装成一个新的struct或者单独使用锁都可以。另外笔者在go 1.9之前通常是使用concurrent-map来解决这类问题,但是不是所有的第三方库都以此来解决问题。 我们先来看看这个...阅读全文

2017-12-19 20:01:01 终于19岁
阅读:3574 评论:2

Go 调优技术

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

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

仅需简单 5 步,给你的 Golang 程序添加 GUI (使用 Electron )

创建一个 Golang app 是一件简单又轻松的事情,但是有时候你想给你的应用锦上添花:创建一个 GUI! 在本篇文章中,我将通过使用 astilectron 工具中的 bootstrap 以及 bundler 给一个简单的 Golang 程序添加 GUI。 我们的带有 GUI 的 Golang app 能够打开一个文件夹并且展示其中的内容。 你可以在这里找到完成后的 [代码](https://github.com/asticode/go-astilectron-demo) ...阅读全文

2017-12-27 21:44:33 polaris
阅读:44770 评论:3

Map 在 Go runtime 中的高效实现(不使用范型)

这篇文章基于我在日本东京 [GoCon Spring 2018](https://gocon.connpass.com/event/82515/) 上的演讲讨论了,Go 语言中的 map 是如何实现的。 ## 什么是映射函数 要明白 map 是如何工作的的,我们需要先讨论一下 *map 函数*。一个 map 函数用以将一个值映射到另一个值。给定一个值,我们叫 *key*,它就会返回另外一个值,称为 *value*。 ``` map(key) → value ``` 现...阅读全文

2018-06-20 09:50:48 snowInPluto
阅读:4793 评论:3