Go语言中文网 为您找到相关结果 567

go程序包源码解读——golang.org/x/net/contex

强烈建议读者先完成http://blog.golang.org/pipelines的阅读,此文对于go的channel的用法会让初学者有一种豁然开朗的感觉。 简介 context是一个在go中时常用到的程序包,google官方开发。特别常见的一个应用场景是由一个请求衍生出的各个goroutine之间需要满足一定的约束关系,以实现一些诸如有效期,中止routine树,传递请求全局变量之类的功能。使用context实现上下文功能约定需要在你的方法的传入参数的第一个传入一个context.Context类型的变量。我们将通过源代码的阅读和一些示例代码来说明context的用法。 文档在此:https://godoc.org/golang.org/x/net/context,另有一篇官方博客http...阅读全文

博文 2015-10-13 16:30 xiaohu50

go服务端----使用gin框架搭建简易服务

使用gin框架搭建简易服务 go语言web框架挺多的,各有各的特点和风格。我之所以在项目中使用gin框架,是因为项目一开始是用的martini,一个设计得很好的框架,但是存在一个比较严重的问题,就是大量使用反射使用太多导致效率过低(这个问题也导致了程序在访问量暴涨时内存上涨过快的问题),而且这个框架在去年就没有人维护了,而作者推荐使用风格很相近的gin框架,大概看了一下,风格确实差不多,而且效率很高,于是就用了gin。至于其它的框架,了解得比较多的是beego,项目中也使用了它的子项目beelog,但是由于我做的项目是偏向于应用服务,而不是网站服务,它的风格更适合网站服务,因此就没有选择它。 贴一下这两个框架的github仓库,martini就不推荐了 gin beego 下面贴一下用gin...阅读全文

博文 2016-11-04 20:00 KeKeQiaoKeLi

golang gRPC示例

gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。 1、普通帐号安装protobuf unzip protobuf-cpp-3.0.0-alpha-3.zip cd protobuf-3.0.0-alpha-3/ ./configure make && sudo make install go get -u github....阅读全文

博文 2015-06-18 09:14 dazheng

Go 语言编写的缓存及缓存过滤库:groupcache

GROUPCACHE简单介绍 groupcache 是使用 Go 语言编写的缓存及缓存过滤库,作为 memcached 许多场景下的替代版本。 对比原始 memcached Cache Results function get_foo(foo_id) foo = memcached_get("foo:" . foo_id) return foo if defined foo foo = fetch_foo_from_database(foo_id) memcached_set("foo:" . foo_id, foo) return foo end 首先,groupcache 与 memcached 的相似之处:通过 key 分片,并且通过 key 来查询响应的 peer。 其次,group...阅读全文

博文 2013-11-15 22:56 songbohr

GO 语言学习的五个阶段(带例子)

Francesc (@francesc) is a member of the Go core team and a developer advocate for Google Cloud Platform. He’s a lover of programming languages, a master of technical instruction at Google, and one of the creators of the Go tour. This talk was inspired by another talk from Raquel Vélez at JSConf. Slides for this talk have been posted here. Sourcegra...阅读全文

博文 2015-02-28 18:00:00 泥土笨笨, 砼砼, 社会主义好, 暗夜在火星, ShowColors, soaring, 无若

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.7及以前版本编写的Go代码,理论上都可以通过Go 1.8进行编译并运行。因此在臆想中的Go 2.0变成现实之前,每个Go Release版本在语言这方面的“改变”都会是十分微小的。 1、仅tags不同...阅读全文

博文 二月 3, 2017 bigwhite

hive,skynet以及go语言

2013-09-25 hive,skynet以及go语言 hive,skynet以及go语言 skynet到hive的演化 hive和go的比较 关于网游 hive,skynet以及go语言 这里的hive和skynet都是云风大神的开源项目。skynet是一个基于actor模型的开源并发框架。hive是skynet简化并去掉了一些“历史包袱”之后重新设计的框架。go是google开源的一门编程语言。 为什么把这些东西放到一块呢?因为我看了一下它们的代码,发现很多地方有惊人的相似之处,这些正是大牛们长时间积累沉淀下来的东西,非常有价值,所以这篇文章将它们拿到一起分析一下。 skynet到hive的演化 actor模型和[[][skynet]]的文章,最新的skynet代码我没有跟进。按云风的...阅读全文

go-martini基础入门

Martini框架是使用Go语言作为开发语言的一个强力的快速构建模块化web应用与服务的开发框架。Martini是一个专门用来处理Web相关内容的框架,其并没有自带有关ORM或详细的分层内容。所以当我们使用Martini作为我们的开发框架时,我们还需要选取适合的ORM等其他包。昨天大象哥哥看了下,感觉还是蛮屌蛮简单的,不啰嗦上代码。 package main import ( "github.com/astaxie/beego/context" "github.com/go-martini/martini" "github.com/martini-contrib/render" "net/http" "fmt" ) //定义一个自己的中间件,这里将beego的context注入 func m...阅读全文

博文 2015-10-31 11:54 别人说我名字很长

Gorilla web toolkit—Go Web开发工具集

[Gorilla web toolkit](http://www.gorillatoolkit.org/) 提供了好几个Golang Web开发工具,本站就使到了一些,很不错。 工具列表: - [gorilla/context](http://www.gorillatoolkit.org/pkg/context) stores global request variables. - [gorilla/mux](http://www.gorillatoolkit.org/pkg/mux) is a powerful URL router and dispatcher. - [gorilla/reverse](http://www.gorillatoolkit.org/pkg/r...阅读全文

为什么 Go 不是一款好的编程语言

I like Go. I use it for a number of things (including this blog, at the time of writing). Go is useful. With that said, Go is not a good language. It's not bad; it's just not good. We have to be careful using languages that aren't good, because if we're not careful, we might end up stuck using them for the next 20 years. This is a list of my chief ...阅读全文

博文 2014-12-03 12:00:00 BreakinBad, 开源中国七里香, Ley

Go语言错误处理

近期闲暇用Go写一个lib,其中涉及到error处理的地方让我琢磨了许久。关于Go错误处理的资料和视频已有许多,Go authors们也在官方Articles和Blog上多次提到过一些Go error handling方面的一些tips和best practice,这里仅仅算是做个收集和小结,尽视野所及,如有不足,欢迎评论中补充。(10月因各种原因,没有耕博,月末来一发,希望未为晚矣 ^_^) 一、概述 Go是一门simple language,常拿出来鼓吹的就是作为gopher习以为傲的仅仅25个关键字^_^。因此Go的错误处理也一如既往的简单。我们知道C语言错误处理以返 回错误码(errno)为主流,目前企业第一语言Java则用try-catch- finally的处理方式来统一应对错误...阅读全文

博文 十月 30, 2015 bigwhite

The 5 stages of learning Go (with examples)

Francesc (@francesc) is a member of the Go core team and a developer advocate for Google Cloud Platform. He’s a lover of programming languages, a master of technical instruction at Google, and one of the creators of the Go tour. This talk was inspired by another talk from Raquel Vélez at JSConf. Slides for this talk have been posted here. Sourcegra...阅读全文

博文 2015-02-25 06:14 Francesc Campoy

Martini源码剖析

martini是非常优雅的Go Web框架。他基于依赖注入的思想,仿照Sinatra的路由设计,参考Express的中间件设计,而且核心微小,扩展方便,非常值得学习。但是由于本身API设计简洁,使很多细节无法从代码理解。所以,我写一点笔记记录martini的工作方式。 Martini核心 我们从最简单的官方实例入手: package main import "github.com/go-martini/martini" func main() { m := martini.Classic() m.Get("/", func() string { return "Hello world!" }) m.Run() } martini.Martini是自带的核心结构,负责完成依赖注入和调用的过程。...阅读全文

博文 2014-04-24 傅小黑

Beego源码分析

beego 是 @astaxie 开发的重量级Go语言Web框架。它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点。并且beego在国内企业用户较多,社区发达和Q群,文档齐全,特别是 @astaxie 本人对bug和issue等回复和代码修复很快,非常敬业。beego框架本身模块众多,无法简单描述所有的功能。我简单阅读了源码,记录一下beego执行过程。官方文档已经图示了beego执行过程图,而我会比较详细的解释beego的源码实现。 注意,本文基于beego 1.1.4 (2014.04.15) 源码分析,且不是beego的使用教程。使用细节的问题在这里不会说明。 本文小站地址:http://fuxiaohei.me/article/27/beego-source-stu...阅读全文

博文 2014-05-01 00:39 傅小黑

go语言和java+jetty的web hello world 性能测试对比

公司现在的搜索服务RESTful架构一直是使用java + jetty; jetty的简单和高效一直很让人喜欢,搜索的RESTful架构两年来一直很稳定;但是软负载keepalived上想添加些业务的控制模块,可是keepalived没有专门的开发接口,自己新开发一套?对成本和性能、稳定性要求很高,考虑过scala 、lisp 、c 都觉得不合适,需要开发周期,性能都要考虑进去,go语言出来也两年多了,所以去关注了一下;下面是go对比jetty的性能测试。(注:go 语言的web没有服务容器这个概念,不需要apache 或nginx 等等,至少先阶段是这样) 测试的内容很简单,go 和java都是一个"hello world "的web输出 go代码 package main import ...阅读全文

博文 2013-02-21 11:29 Xiao_Qiang_

Go1.8正式发布

今天Go团队很高兴地宣布Go 1.8发布了。你可以从下载页面获得1.8版本。在这个版本中,整个标准库有显着的性能改进和变化。Go 1.7中为64位x86系统引入的编译器后端现在用于所有体系结构,在这些体系结构下可以看到显着的性能改进。例如,我们的基准程序所需的CPU时间在32位ARM系统上减少了20-30%。在此版本中,对于64位x86系统也有一些性能提升。编译器和链接器跑得更快。编译时间应该比Go 1.7缩短约15%。在这一领域还有更多的工作要做:希望未来版本的编译速度更快。垃圾收集暂停应明显更短,通常在100微秒以下,通常低至10微秒。HTTP服务器添加对HTTP/2 Push的支持,允许服务器向客户端推送。这对于消除网络延迟非常有用。 HTTP服务器还添加了对优雅停机的支持,允许服务器...阅读全文

golang实现unicode码和中文之间的转换

将中文转换为unicode码,使用golang中的strconv包中的QuoteToASCII直接进行转换,将unicode码转换为中文就比较麻烦一点,先对unicode编码按\u进行分割,然后使用strconv.ParseInt,将16进制数字转换Int64,在使用fmt.Sprintf将数字转换为字符,最后将其连接在一起,这样就变成了中文字符串了。 参考代码如下: 1 package main 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 ) 8 9 func main() { 10 sText := "中文" 11 textQuoted := strconv.QuoteToASCII(sText) 12 textUnquoted := t...阅读全文

博文 2016-06-28 11:24 borey

golang捕获http.ResponseWriter被close的两种方式(有无context)

golang捕获http.ResponseWriter被close的两种方式(有无context) 方便被传阅,采用中文,其实习惯看英文后,发现中文对于一些问题,读起来绕口,接下来有很多也是直接照搬英文,以下几个方面简单介绍下: - 为嘛服务端需要知道http连接被断开(客户端主动cancel) - 最简单的方式捕获 - 当使用了context来传递信息时,如何捕获 - context捕获后,如何继续传递 需求 吐槽下自己 ,第一次用CSDN的新款编辑器很是生疏 Most web requests by design take only a few dozen milliseconds to process. But sometimes web apps need to leave a co...阅读全文

博文 2015-08-04 00:48 u010026901

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

零、从Release Cycle说起 从Go 1.3版本开始,Golang核心开发Team的版本开发周期逐渐稳定下来。经过Go 1.4、Go1.5和Go 1.6的实践,大神Russ Cox在Go wiki上大致定义了Go Release Cycle的一般流程: 半年一个major release版本。 发布流程启动时间:每年8月1日和次年2月1日(真正发布日期有可能是这个日子,也可能延后几天)。 半年的周期中,前三个月是Active Development,then 功能冻结(大约在11月1日和次年的5月1日)。接下来的三个月为test和polish。 下一个版本的启动计划时间:7月15日和1月15日,版本计划期持续15天,包括讨论这个major版本中要实现的主要功能、要fix的前期遗留的b...阅读全文

gorilla/mux类库解析

golang自带的http.SeverMux路由实现简单,本质是一个map[string]Handler,是请求路径与该路径对应的处理函数的映射关系。实现简单功能也比较单一: 1. 不支持正则路由, 这个是比较致命的 2. 只支持路径匹配,不支持按照Method,header,host等信息匹配,所以也就没法实现RESTful架构 而gorilla/mux是一个强大的路由,小巧但是稳定高效,不仅可以支持正则路由还可以按照Method,header,host等信息匹配,可以从我们设定的路由表达式中提取出参数方便上层应用,而且完全兼容http.ServerMux ##使用事例 ``` r := mux.NewRouter() //与http.ServerMux不同的是mux.Router是完全的...阅读全文

博文 2015-10-27 21:23:00 shanks

使用 Go 构建一个解释型语言

I’m currently working on a larger project of mine, Alloy. Alloy is a compiled programming language. One of my favourite hobbies currently in the field of computers and programming is programming languages. In fact, I think every programmer should have a basic understanding of how programming languages work, and that’s why I’m writing this series. T...阅读全文

博文 2015-03-31 09:00:00 Ann_mf, Garfielt, 何传友, 开心613, 无若

golang的服务控制实践

转自自己在csdn的博客:http://blog.csdn.net/qq_26981997/article/details/52275456 对于程序及服务的控制,本质上而言就是正确的启动,并可控的停止或退出。在go语言中,其实就是程序安全退出、服务控制两个方面。核心在于系统信号获取、Go Concurrency Patterns、以及基本的代码封装。 ## 程序安全退出 ### 执行代码非安全写法 在代码部署后,我们可能因为服务配置发生变化或其他各种原因,需要将服务停止或者重启。通常就是for循环阻塞,运行代码,然后通过control+C或者kill来强制退出。代码如下: ```Go //file svc1.go package main import ( "f...阅读全文

go sublime install sublime result

GoSublime Changes ----------------- ## r13.01.06-1 * add two new 9o command `env` and `settings` see 9o `help` for more details * 9o now supports a new scheme `gs.packages` e.g. `ctrl+shft`, left-click on gs.packages://GoSublime/9o.md will open the 9o docs ## r13.01.05-2 * added two task aliases to tskill `tskill replay` will kill/cancel the last r...阅读全文

博文 2013-01-07 20:38 z515123

ubuntu下使用golang、qml与ubuntu sdk开发桌面应用 (简单示例)

找了很长时间go的gui库,试了gtk,准备试qt的时候发现了这个qml库,试了下很好用。 ##准备工作 **1、Go 1.2RC1** go的版本应该不能低于这个,我是在1.2RC发布当天升级后发现的qml,并测试的。 **2、qml** 项目主页 https://github.com/niemeyer/qml 目前还是alpha版。 项目主页里面有各个平台的安装方法 装好后会顺带把qtcreator的ubuntu sdk plugin也给装上。 然后运行qml的示例程序 github.com/niemeyer/qml/examples/particle ![qml](http://images.cnblogs.com/cnblogs_com/hangxin1940/508415/o_qm...阅读全文

博文 2013-09-23 00:43 hangxin1940

使用vendor管理Golang项目依赖

http://www.tuicool.com/articles/NjMzIbJ 我们在项目中除了大量的使用Python外,也大量的使用了Golang构建高效基础运行服务。在使用Golang过程中,我们发现Golang程序缺少依赖库版本功能是一个非常令人头大的问题:某些依赖在某个commit之后发生了API变更之后,如果不修改代码很难兼容,然而开发者之间很有可能因为参与的时间不同,导致执行 go get 命令获取的版本不同,而导致在不同电脑上出现编译不通过问题。同时,在多个程序中,如果使用的commit版本不同,也可能会导致程序编译过程中出现不同的问题。 在之前,我们解决这个问题有两个方案,一种是拆解 go get 命令的执行,首先创建对应依赖目录,利用git命令切换至指定的commit,然后...阅读全文

博文 2016-08-23 11:50 leonpengweicn

Etcd client golang example code

1. 监视某一个节点 watcher := kAPI.Watcher("workers/", &client.WatcherOptions{ Recursive: true, }) for { res, err := watcher.Next(context.Background()) if err != nil { log.Println("Error watch workers:", err) break } if res.Action == "expire" { member, ok := m.members[res.Node.Key] if ok { member.InGroup = false } } else if res.Action == "set" || res.Actio...阅读全文

博文 2016-05-28 20:46 htyu_0203_39

gocrawl 分析

1. gocrawl 类结构 1 // The crawler itself, the master of the whole process 2 type Crawler struct { 3 Options *Options 4 5 // Internal fields 6 logFunc func(LogFlags, string, ...interface{}) 7 push chan *workerResponse 8 enqueue chan interface{} 9 stop chan struct{} 10 wg *sync.WaitGroup 11 pushPopRefCount int 12 visits int 13 14 // keep lookups in map...阅读全文

博文 2014-06-20 01:03 harrysun

Go 支持Protocol Buffers的配置

安装 protoc (The protocol compiler)是由C++写的,支持的 C++、Java、Python、Objective-C、C#、JavaNano、JavaScript、Ruby、PHP 的实现都在 https://github.com/google/protobuf 这个项目中, 例外的是 Go 的实现是在 https://github.com/golang/protobuf 这里。 所以Go 支持 Protocol Buffers的安装需要下面三步: Install the standard C++ implementation of protocol buffers from https://developers.google.com/protocol-buffe...阅读全文

博文 2016-04-27 16:11 ghj1976

golang中context包解读

前瞻 context 包困扰我好久,之前在 watch etcd 的时候首次上手使用这个包,当时并不理解这个包的作用,只知道可以用来关闭 watch , 后来被大牛吐槽了,决定深入探究一番。 简介 golang 中的创建一个新的 goroutine , 并不会返回像c语言类似的pid,所有我们不能从外部杀死某个goroutine,所有我就得让它自己结束,之前我们用 channel + select 的方式,来解决这个问题,但是有些场景实现起来比较麻烦,例如由一个请求衍生出的各个 goroutine 之间需要满足一定的约束关系,以实现一些诸如有效期,中止routine树,传递请求全局变量之类的功能。于是google 就为我们提供一个解决方案,开源了 context 包。使用 context 实...阅读全文

博文 2017-03-03 10:00:40 徐学良

Golang 读取写入Etcd数据库

文出处:个人博客地址:http://www.damonyi.cc/?p=194 项目中用到Etcd数据库来存储容器的信息和应用的域名信息,将操作Etcd的golang代码整理了一下 1、将Container信息写入到指定目录 c, err := common.GetEtcdClient() if err != nil { beego.Error("get etcd client failed") return } kapi := client.NewKeysAPI(c) key := getSkyDnsDomain(domainEtcd.Domain) value, _ := json.Marshal(domainEtcd) var etcderr error common.HaproxyT...阅读全文

博文 2016-07-01 16:06 wangdk789

使用Golang利用ectd实现一个分布式锁

http://blog.codeg.cn/post/blog/2016-02-24-distrubute-lock-over-etcd/ By zieckey · 2016年02月24日 · 1205 Words · ~3min reading time | 编辑这个页面 | Tags: Golang etcd 分布式 本文 http://blog.codeg.cn/post/blog/2016-02-24-distrubute-lock-over-etcd/ 是作者zieckey在研究和学习相关内容时所做的笔记,欢迎广大朋友指正和交流! 版权所有,欢迎转载和分享,但请保留此段声明。 etcd是随着CoreOS项目一起成长起来的,随着Golang和CoreOS等项目在开源社区日益火热, et...阅读全文

博文 2016-06-21 15:03 diegodu

Asp.net core与golang web简单对比测试

最近因为工作需要接触了go语言,又恰好asp.net core发布RC2,就想简单做个对比测试。 下面是测试环境: CPU:E3-1230 v2 内存:16G 电脑有点不给力 操作系统:Centos7.0(虚拟机) asp.net core rc2 golang v1.7beta1 下面是各自的代码: go package main import ( "fmt" "net/http" ) func main() { fmt.Println("This is webserver base!") //第一个参数为客户端发起http请求时的接口名,第二个参数是一个func,负责处理这个请求。 http.HandleFunc("/login", loginTask) //服务器要监听的主机地址和端口...阅读全文

博文 2016-06-03 22:29 gengzhe

beego datatables排序函数

datatables是个很不错的表格,使用GO时排序问题很麻烦,于是写了个函数 package tools import ( "github.com/astaxie/beego/context" "strconv" ) //datatables的排序 func DT_order(aColumns []string, Input *context.BeegoInput) string { maps := make(map[string]string) if iSortCol_0, _ := strconv.Atoi(Input.Query("iSortCol_0")); iSortCol_0 > -1 { ranges, _ := strconv.Atoi(Input.Query("iSort...阅读全文

博文 2014-12-19 11:18 别人说我名字很长

golang语言特性

1.包括的golang特性 Godeps vendor _ 下划线 2.Godeps golang1.1版本之后,有了godep依赖管理工具,项目下新加了Godeps文件夹,其中含有项目依赖的包,记录包依赖的文件为Godeps.json,下面是一个例子,该例子为distribution2.1项目的Godeps,在github.com/docker/distribution可以直接用github.com/spf13/cobra中的结构而不用导入,可见ImportPath下的包可以直接调用Deps下含有的包: { "ImportPath": "github.com/docker/distribution", "GoVersion": "go1.4.2", "Packages": [ "./......阅读全文

博文 2015-10-31 22:10 yuanfang_way

Go最新的dep详解

该文翻译自https://medium.com/i-can-haz-downtime/dep-101-c85e8ab6ed45#.hbngswi0e我很高兴在过去几个月和几个其他gopher开发的一个原型依赖管理工具,名为dep。dep是去年开始由Peter Bourgon组织的项目的一部分。由于我参与开发了一个“godep”,Go的OG依赖管理工具(继承自Keith Rarick),因此加入了dep项目的团队。除了我自己和Peter,团队的其他成员是Jessie Frazelle,Andrew Gerrand和Sam Boyer。 Andrew是Google Go team的一员。 Jessie在Google工作,并参与过大型Go项目,如Docker和Kubernetes。 Sam维护gp...阅读全文

使用 gdb 工具调试 Go

Troubleshooting an application can be fairly complex, especially when dealing with highly concurrent languages like Go. It can be fairly simple to add print statements to determine subjective application state at specific intervals, however it’s much more difficult to respond dynamically to conditions developing in your code with this method. Debug...阅读全文

博文 2015-08-07 11:00:05 一曲, 木兰宿莽, Garfielt, 叶秀兰

小弟阅读studygolang关于路由的流程遇到的问题

下面是我对studygolang路由部分的理解,不知道是否有错误,请大伙指正。这部分在我脑海里还是一堆散沙,无法结合起来。 main函数中initRouter()配置了router和subRouter两个路由。每个路由都有好几个filter,分别实现PreFilter、PreErrorHandle、PostFilter的接口。 在chain.go中的Run()。先执行PreFilter()若返回错误,将执行PreErrorHandle(),否则继续执行PostFilter()输出页面。 (输入页面方式如:view.go的PostFilter()函数中tpl.Execute(rw, data)将填充好的模版返回给用户。) 路由通过string路径注册,每个路由配...阅读全文

golang--gorilla/context,golang之单例模式

gorilla是用golang写的web工具箱,里面提供了一系列的工具。在用golang开发web中,搭配gorilla可以加快整个开发的进程。gorilla的官网在这里,代码托管在github,这里要看的是gorilla/context。 在context文件夹里面,有个context.go文件,里面就是context包主要的代码。 在context.go的开始部分,声明了几个全局变量, var ( mutex sync.Mutex data = make(map[*http.Request]map[interface{}]interface{}) datat = make(map[*http.Request]int64) ) 然后下面定义了Set(),Get(),Delete(),Cle...阅读全文

博文 2013-04-17 08:15 getong

Beego源码分析

beego 是 @astaxie 开发的重量级Go语言Web框架。它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点。并且beego在国内企业用户较多,社区发达和Q群,文档齐全,特别是 @astaxie 本人对bug和issue等回复和代码修复很快,非常敬业。beego框架本身模块众多,无法简单描述所有的功能。我简单阅读了源码,记录一下beego执行过程。官方文档已经图示了beego执行过程图,而我会比较详细的解释beego的源码实现。 注意,本文基于beego 1.1.4 (2014.04.15) 源码分析,且不是beego的使用教程。使用细节的问题在这里不会说明。 1. 启动应用 beego官方首页提供的示例非常简单: package main import "githu...阅读全文

博文 2014-04-30 傅小黑

golang 的 http cookie 用法

golang的http cookie用法 在服务端程序开发的过程中,cookie经常被用于验证用户登录。golang 的 net/http 包中自带 http cookie的定义,下面就来讲一下cookie的一般用法以及需要注意的问题。 http cookie的定义 先来看下golang对cookie结构体的定义: type Cookie struct { Name string Value string Path string // optional Domain string // optional Expires time.Time // optional RawExpires string // for reading cookies only // MaxAge=0 means n...阅读全文

博文 2016-05-24 10:21 liangDream

gRPC服务发现&负载均衡

gRPC服务发现&负载均衡 构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案: 1、集中式LB(Proxy Model) 在服务消费者和服务提供者之间有一个独立的LB,通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy等实现。LB上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向LB发起请求,由LB以某种策略,比如轮询(Round-Robin)做负载均衡后将请求转发到目标服务。LB一般具备健康检查能力,能自动摘除不健康的服务实例。 该方案主要问题: 单点问题,所有服务调用流量都经过LB,当服务数量和调用量大的时候,LB容易成为瓶颈,且一旦LB发生故障...阅读全文

博文 2017-03-13 15:01:10 SOFTFN

Vendor 包管理器 Govendor

Govendor 是 Golang 的 Vendor 包管理器,方便你管理 Vendor 和 Verdor 包。 特性: * 可以采用`govendor add/update`复制现有的依赖从$GOPATH * 如果要忽视vendor/*/,可采用govendor 同步恢复依赖 * 可直接通过`govendor fetch`控制器添加新的依赖或者更新现有依赖 * 可采用`govendor migrate `实现系统间迁移 * 支持Linux, OS X, Windows,甚至现有所有操作系统 * 支持Git,Hg,SVN,BZR(必须指定一个路径) 快速开始

阅读全文

开源项目 2016-08-29 12:00:04 kardianos

golang martini 源码阅读笔记之martini核心

继上一篇关于inject注入的笔记,理解了martini的关键核心之一:依赖注入。注入回调函数,由运行时进行主动调用执行。这一篇主要是注解martini的骨架martini.go的实现,下面先从一个简单的martini使用实例,即创建一个最简单的http服务器开始。 server.go //martini使用简单实例 package main import "github.com/go-martini/martini" func main() { m := martini.Classic() //获取一个martini实例 m.Get("/", func() string { // 用户自定义路由规则 return "Hello world!" }) m.Run() // 运行服务器 } m...阅读全文

博文 2016-03-07 17:52 bicowang

go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go

从本节开始,将逐步阅读nsq各模块的代码。 读一份代码,我的思路一般是: 1、了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助。如第一篇文章:go语言nsq源码解读-基本介绍。 2、了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块,会是怎么样的思路。如第二篇文章:go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin 3、开始上手试读,为不打击阅读的积极性,可以选择一个简单的模块,或者某一个功能点开始读。对nsq而言,打开源码的目录看一下,发现nsqlookupd和nsqadmin的代码相对较少,而nsqd的代码量较多。再比较nsqlookupd和nsqadmin,发现nsqadmin下还有一个templates目录,这大概是在第一篇文章里用来显示截图里...阅读全文

博文 2014年03月23日 baiyuxiong

asp.net core VS goang web[修正篇]

先前写过一篇文章:http://www.cnblogs.com/gengzhe/p/5557789.html,也是asp.net core和golang web的对比,热心的园友提出了几点问题,如下: 1、需要加入sleep来模拟实际业务,这样才能考验协程调度能力。 2、golang擅长的是多核环境。 于是今天修正了一下再次进行测试 CPU:E1230-v2 内存:16GB 操作系统:centos 7 (3核心2GB内存) 下面是代码: go package main import ( "fmt" "net/http" "time" ) func main() { fmt.Println("This is webserver base!") //第一个参数为客户端发起http请求时的接口名,...阅读全文

博文 2016-06-05 20:45 gengzhe

go web开发之url路由设计

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

博文 2016-09-21 22:36 qibin0506