Golang编程经验总结

如何选择web框架: 首先Golang语言开发web项目不一定非要框架,本身已经提供了Web开发需要的一切必要技术。当然如果想要ruby里面Rail那种高层次全栈式的MVC框架, Golang里面暂时没有,但是不是所有人都喜欢这种复杂的框架。Golang里面一些应用层面的技术需要自己去组装,比如session,cache, log等等. 可选择的web框架有martini, goji等,都是轻量级的。 Golang的web项目中的keepalive 关于keepalive, 是比较复杂的, 注意...阅读全文

2015-02-03 16:38 u013834131
阅读:14745 评论:0

RESTful API 设计最佳实践

本文由 伯乐在线 - bruce-accumulate 翻译。未经许可,禁止转载!英文出处:Vinay Sahni。欢迎加入翻译小组。 背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API 格式如何?你的API是否应该加入版本信息?当你开始写一个app的时候,特别是后端模型部分已经写完的时候,你不得不殚精竭虑的设计和实现自己app的public API部分。因为一旦...阅读全文

阅读:13744 评论:0

[Golang]Map的一个绝妙特性

补充说明:一些评论的人对本文中的一些内容感到很困惑,但是我不想让大家感到我言语不清,所以在此澄清一下:是的, 默认情况下,向一个hash表插入的元素是没有固定顺序的。但是因为很多原因,比如有一些帖子就指出了不是所有的map都是hash表(而且有些语言还有有顺序的hash表,比如java的TreeMap), 我还是能够了解为什么很多人(尤其是对Go map实现机制比较了解的人)会假定遍历map元素的顺序和向map插入元素的顺序是相同的。我原来的例子是我自己想出来的,并没有演示出大多数版本的Go关于...阅读全文

阅读:98162 评论:18

搭建自己的ngrok服务

搭建自己的ngrok服务 三 14 bigwhite技术志 Amazon, DNS, EC2, github, Go, Golang, http, https, Linux, ngrok, ngrokd, tunnel, Ubuntu, vps, 亚马逊, 代理, 企业号, 公众号, 域名, 开源, 微信, 隧道 1 Comment 在国内开发微信公众号、企业号以及做前端开发的朋友想必对ngrok都不陌生吧,就目前来看,ngrok可是最佳的在内网调试微信服务的tunnel工 具。记得今年春节前,...阅读全文

阅读:18759 评论:2

golang 生成图表

golang 支持生产图片的源码在下面地址可以看到: https://github.com/vdobler/chart 这个项目 的 example 目录下编译后,执行下面命令就可以生产所有它支持的图表。 example/example –All 这些生产的图表效果如下: bestof.png xautoscale.png xbar1.png xbar2.png xbar3.png xbox1.png xgraphics.png xhist.png xkey.png xlog1.png xmle...阅读全文

2014-11-11 21:46 ghj1976
阅读:9048 评论:0

Scala与Golang的并发实现对比

并发语言俨然是应大规模应用架构的需要而提出,有其现实所需。前后了解了Scala和Golang,深深体会到现代并发语言与旧有的Java、C++等语言在风格及理念上的巨大差异。本文主要针对Scala和Golang这两个我喜爱的并发语言在并发特性上的不同实现,做个比较和阐述,以进一步加深理解。 一. Scala与Golang的并发实现思路Scala语言并发设计采用Actor模型,借鉴了Erlang的Actor实现,并且在Scala 2.10之后,Scala采用的是Akka Actor模型库。Actor...阅读全文

阅读:18314 评论:0

Go和HTTPS

Go和HTTPS 四 30 bigwhite技术志 CA, CNNIC, Go, Golang, http, https, MD5, ngrok, openssl, SHA, SHA-1, SHA256, SSL, TLS, Web, 加密, 单项散列, 密钥, 微信, 摘要, 数字证书, 私钥, 签名 1 Comment 近期在构思一个产品,考虑到安全性的原因,可能需要使用到HTTPS协议以及双向数字证书校验。之前只是粗浅接触过HTTP(使用Golang开 发微信系列)。对HTTPS的了解则始...阅读全文

阅读:44776 评论:7

NSQ:分布式的实时消息平台

NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub,其当前最新版本是0.3.1版。NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。另外,官方还提供了拆箱即用Go和Python库。如果读者...阅读全文

阅读:16421 评论:0

ngrok原理浅析

ngrok原理浅析 五 14 bigwhite技术志 firewall, ftp, github, Go, Golang, http, https, network, ngrok, ngrokd, Opensource, proxy, SSH, SSL, TCP, TLS, tunnel, VNC, vpn, Wechat, 代理, 开源, 微信, 远程桌面, 防火墙, 隧道 No Comments 之前在进行微信Demo开发时曾用到过ngrok这个强大的tunnel(隧道)工具,ngrok在其...阅读全文

阅读:7492 评论:0

Go中优雅的HTTP服务关闭

虽然写出7x24小时不间断运行的服务是一件很酷的事情,但是我们仍然在某些时候,譬如服务升级,配置更新等,得考虑如何优雅的结束这个服务。 当然,最暴力的做法直接就是kill -9,但这样直接导致的后果就是可能干掉了很多运行到一半的任务,最终导致数据不一致,这个苦果只有遇到过的人才能深深地体会,数据的修复真的挺蛋疼,有时候还得给用户赔钱啦。 所以,通常我们都是给服务发送一个信号,SIGTERM也行,SIGINTERRUPT也成,反正要让服务知道该结束了。而服务收到结束信号之后,首先会拒绝掉所有外部新...阅读全文

2015.01.25 21:04 siddontang
阅读:16006 评论:0

Go语言的函数调用信息

By chaishushan{AT}gmail.com 注: 本文初稿发在 Golang 中国博客, 这里的内容有部分修改. 函数的调用信息是程序中比较重要运行期信息, 在很多场合都会用到(比如调试或日志). Go语言 runtime 包的 runtime.Caller / runtime.Callers / runtime.FuncForPC 等几个函数提供了获取函数调用者信息的方法. 这几个函数的文档链接: http://golang.org/pkg/runtime/#Caller http...阅读全文

阅读:3032 评论:0

goroutine背后的系统知识

Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。 1. 操作系统与运行库 2. 并发与并行 (Concurrency and Parallelism) 3. 线程的调度 4. 并发编程框架 5. goroutine 1. 操作系统与运行库...阅读全文

阅读:978 评论:0

moonmq: 用go实现的高性能message queue

介绍 moonmq是一个用go实现的高性能消息队列系统,后续准备用于我们消息推送服务以及各个后台的异步任务。 在设计上面,moonmq主要借鉴了rabbitmq以及rocketmq相关的思想,但是做了很多减法,毕竟我不是要设计成一个非常通用的mq。 名词解释 publisher,消息生产者consumer,消息消费者broker,消息中转站queue,消息存储队列 publisher给一个命名的queue发送消息msg,broker负责将msg存放在queue里面。 consumer可以关注自己...阅读全文

阅读:6641 评论:0

Go程序调试、分析与优化

Go程序调试、分析与优化 八 25 bigwhite技术志 atomic, BradFitzpatrick, Channel, Concurrency, Darwin, debugging, Go, Golang, goroutine, gotools, Linux, Mutex, optimization, parallelism, Perl, pprof, Ubuntu, YAPC, 优化, 原子操作, 并发, 并行, 调试, 锁 No Comments Brad Fitzpatrick在Y...阅读全文

阅读:6698 评论:0

如何快速掌握一门新技术/语言/框架...

IT行业中的企业特点是都属于知识密集型企业。这种企业的核心竞争力与员工的知识和技能密切相关。而如果你在企业中扮演的是工程师的角色的话,那么你的核心竞争力就是IT相关的知识与技能的储备情况。而众所周知,IT行业是一个大量产生新知识的地方,就拿Web前端举例,短短的5,6年时间,Web前端已经经历了数次变革,就目前来看变革还将继续下去。从以前的div+css网格化布局到JavaScript的方兴未艾,然后是各种JavaScript框架的百家争鸣,HTML5和CSS3的落地,移动web冲击下带来的响应...阅读全文

2015-08-17 09:36 huang0925
阅读:1819 评论:0

Go语言TCP Socket编程

Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的。 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,socket...阅读全文

十一月 17, 2015 bigwhite
阅读:27508 评论:4

golang的http client源码简析

RT: 有注释信息的代码在:https://github.com/yuanyangen/go_learning/tree/master/src/learning 上述代码是从golang1.5.2中得到的http部分源代码 在分析该源码过程中, 得到的简易流程图是: 在上述的流程中:不同颜色的方框表示不同的协程, 上图并没有完全将所有的细节 都展示出来,只是一个最基本的功能的描述, 而方框中的文字表示该处理的代码在哪个包下面的具体函数。 对于具体的详细处理流程, 请查看源代码。 在代码中出现的部...阅读全文

2016-01-12 00:23 yuanyangen
阅读:8161 评论:2