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

go依赖管理-govendor

Golang 官方并没有推荐最佳的包管理方案。到了1.5版本时代,官方引入包管理的设计,加了 vendor 目录来支持本地包管理依赖。官方 wiki 推荐了多种支持这种特性的包管理工具,如:Godep、gv、gvt、glide、govendor等。 下面简要介绍一个我在项目中用到的 -- govendor。该工具将项目依赖的外部包拷贝到项目下的 vendor 目录下,并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。对于 govendor 来说,依赖包主要有以下多种类型: 状态 缩写状态 含义 +local l 本地包,即项目自身的包组织 +external e 外部包,即被 $GOPATH 管理,但不在 vendor 目录下 +vendor v 已被 go...阅读全文

博文 2017-05-02 16:00:34 happen

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

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

博文 2016-11-04 13:00:06 KeKeQiaoKeLi

Golang 微框架 Gin 简介

所谓框架 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个。 曾经我以为Python世界里的框架已经够多了,后来发现相比golang简直小巫见大巫。golang提供的net/http库已经很好了,对于http的协议的实现非常好,基于此再造框架,也不会是难事,因此生态中出现了很多框架。既然构造框架的门槛变低了,那么低门槛同样也会带来质量参差不齐的框架。 考察了几个框架,通过其github的活跃度,维护的team,以及生产环境中的使用率。发现Gin还是一个可以学习的轻巧框架。 Gin Gin是一个g...阅读全文

博文 2017-12-03 16:03:06 mickelfeng

服务器开发利器golang context用法详解

本文主要基于官方文档Go Concurrency Patterns: Context以及视频Advanced Go Concurrency Patterns的学习而得。 背景 在go服务器中,对于每个请求的request都是在单独的goroutine中进行的,处理一个request也可能设计多个goroutine之间的交互, 使用context可以使开发者方便的在这些goroutine里传递request相关的数据、取消goroutine的signal或截止日期。 Context结构 // A Context carries a deadline, cancelation signal, and request-scoped values // across API boundaries. ...阅读全文

博文 2017-06-29 09:07:03 kingeasternsun

Gin实战:Gin+Mysql简单的Restful风格的API

我们已经了解了Golang的Gin框架。对于Webservice服务,restful风格几乎一统天下。Gin也天然的支持restful。下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全。我们先以一个单文件开始,然后再逐步分解模块成包,组织代码。 It works 使用Gin的前提是安装,我们需要安装gin和mysql的驱动,具体的安装方式就不在赘述。可以参考Golang 微框架Gin简介和Golang持久化。 创建一个文件夹用来为项目,新建一个文件main.go: ☁ newland tree . └── main.go main.go package main import ( "gopkg.in/gin-gonic/gin.v1" "net/http" ) func main() {...阅读全文

博文 2017-03-23 06:59:03 人世间

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, 无若

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-22 22:02:29 dazheng

使用vendor管理Golang项目依赖

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

博文 2016-09-08 13:00:02 leonpengweicn

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...阅读全文

博文 2017-02-14 11:24:45 方圆

Golang 微服务教程(一)

译文链接:wuYin/blog原文链接:ewanvalentine.io,翻译已获作者授权。 本节对 gRPC 的使用浅尝辄止,更多可参考:gRPC 中 Client 与 Server 数据交互的 4 种模式 前言 系列概览 《Golang 微服务教程》分为 10 篇,总结微服务开发、测试到部署的完整过程。 本节先介绍微服务的基础概念、术语,再创建我们的第一个微服务 consignment-service 的简洁版。在接下来的第 2~10 节文章中,我们会陆续创建以下微服务: consignment-service(货运服务) inventory-service(仓库服务) user-service(用户服务) authentication-service(认证服务) role-servic...阅读全文

博文 2018-06-01 16:34:38 wuYin

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-27 15:00:06 xiaohu50

golang中context包解读

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

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

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-29 02:00:01 borey

理解 golang 中的 context(上下文) 包

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/understanding-the-context-package-in-golang/0_exTPQ4ppfrdjuXcR.jpg) Go 中的 context 包在与 API 和慢处理交互时可以派上用场,特别是在生产级的 Web 服务中。在这些场景中,您可能想要通知所有的 goroutine 停止运行并返回。这是一个基本教程,介绍如何在项目中使用它以及一些最佳实践和陷阱。 要理解 context 包,您应该熟悉两个概念。 在转到 context 之前,我将简要介绍这些内容,如果您已经熟悉,则可以直接转到 context 部分。 ## Goroutine...阅读全文

博文 2018-07-29 00:20:23 themoonbear

Golang 中的微服务 - 第一部分

## 介绍 Golang 中的微服务系列总计十部分,预计每周更新。本系列的解决方案采用了 protobuf 和 gRPC 作为底层传输协议。为什么采用这两个技术呢?我花了相当长的时间,才想出并决定采用这个方案。这个方案对开发者来说,非常清晰而简明。我也很乐意把自己在搭建、测试和部署端到端的微服务过程中的心得,分享给想接触这块的朋友们。 在这个教程中,我们将先接触几个基础的概念和术语,然后开始搭建第一个简单的微服务模型。 本系列中,我们将会创建以下服务: - 委托 - 存货清单 - 用户 - 认证 - 角色 - 容器 整个技术栈从底至顶主要可划分为:golang、mongodb、grpc、docker、Google Cloud、Kubernetes、NATS、CircleCI、Terrafor...阅读全文

博文 2017-12-26 14:20:00 polaris

Go Context的踩坑经历

---- 0 引言 ---- context 是Go中广泛使用的程序包,由Google官方开发,在1.7版本引入。它用来简化在多个go routine传递上下文数据、(手动/超时)中止routine树等操作,比如,官方http包使用context传递请求的上下文数据,gRpc使用context来终止某个请求产生的routine树。由于它使用简单,现在基本成了编写go基础库的通用规范。笔者在使用context上有一些经验,遂分享下。 本文主要谈谈以下几个方面的内容: * context的使用。 * context实现原理,哪些是需要注意的地方。 * 在实践中遇到的问题,分析问题产生的原因。 ---- 1 使用 ---- --------------- 1.1 核心接口Context -----...阅读全文

博文 2018-03-13 14:26:18 包增辉

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是完全的...阅读全文

博文 2016-06-11 16:41:09 shanks

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不同...阅读全文

博文 2017-02-06 03:23:51 bigwhite

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...阅读全文

博文 2014-10-12 20:00:00 songbohr

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 12:00:03 别人说我名字很长

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的处理方式来统一应对错误...阅读全文

博文 2015-10-30 21:47:41 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代码我没有跟进。按云风的...阅读全文

博文 2015-03-17 10:25:36 zenlife

为什么 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 语言中的 panic 输出

我的代码有一个 bug。? ``` panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0x751ba4] goroutine 58 [running]: github.com/joeshaw/example.UpdateResponse(0xad3c60, 0xc420257300, 0xc4201f4200, 0x16, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /go/src/github.com/joeshaw/example/resp.go:...阅读全文

博文 2017-11-24 23:40:15 polaris

Go net/http 超时指导

当在编写一个Go语言的HTTP服务端或者是客户端时,超时是最容易同时也是最敏感的错误,有很多选择,一个错误可以导致很长时间没有结果,知道网络出现故障,或者进程宕掉。 HTTP是一个复杂的多阶段的协议,所以超时没有一刀切的解决方案。想想一个流的端点与JSON API端点和comet端点。事实上,默认值往往不是你想要的。 在这篇文章中,我将采取不同的阶段,你可能需要申请一个超时,并在服务器和客户端不同的方式来实现。 设置最后期限(超时) 首先,你需要理解Go提供的最初级的网络超时实现:Deadlines(最后期限)。 在Go标准库net.Conn中实现了Deadlines,通过 set[Read|Write]Deadline(time.Time)方法进行设置。Deadlines是一个绝对时间,一...阅读全文

博文 2016-08-12 11:00:08 Lina_ACM

Teleport2.0 一个Golang TCP Socket的全新框架

Teleport beta2.0 实现了一个全新的Golang TCP Socket框架,它通用、高效、灵活!可被用于Peer-Peer对等通信、RPC、长连接网关、微服务、推送服务,游戏服务等领域。 teleport_server 1. 特性 服务器和客户端之间对等通信,两者API方法基本一致 底层通信数据包包含Header和Body两部分 支持单独定制Header和Body编码类型,例如JSON Protobuf Body支持gzip压缩 Header包含状态码及其描述文本 支持推,拉,回复等通信方式 支持插件机制,可以自定义认证、心跳、微服务注册中心、统计信息插件等。 无论服务器或客户端,均支持都优雅重启、优雅关闭 支持实现反向代理功能 日志信息详尽,支持打印输入、输出消息的详细信息(...阅读全文

博文 2017-08-27 09:05:14 HenryLee

go web开发之url路由设计

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

博文 2016-10-03 11:00:11 qibin0506

Golang 中的微服务 - 第二部分 - Docker 和 go-micro

## 简介: Docker 和 go-micro **[在上篇文章中](https://studygolang.com/articles/12060)**,我们大致介绍了如何编写一个基于 `gRPC` 的微服务。在这个部分,我们将涵盖 `Docker` 服务的基础知识,我们也将使用 [go-micro](https://github.com/micro/go-micro) 更新我们的服务,并在文本末尾引入第二个服务。 ## Docker简介 随着云计算的到来和微服务的诞生,服务在部署的时候有更多的压力,但是一次一小段代码就产生了一些有趣的新思想和新技术,其中之一就是[容器](https://en.wikipedia.org/wiki/Operating-system-level_virtua...阅读全文

博文 2018-01-03 15:53:35 polaris

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-10-04 19:26:39 傅小黑

etcd 使用小记

咱们这不讲安装, 只讲使用. etcd,consul 都是分布式KV, 一般用于服务发现; 1 注册服务 这里使用 etcd.clientv3搞事情, GoDoc在 这, 以下是伪代码 // key 随你制定, 只要能标识是那个服务器(比如 root/game/node_1)即可. value 可以包含addr, 状态, 优先度等信息 client.OpPut(key,value) 这里的小提示: 最好实现健康检查, 再好的代码也有跑不动的一天, 好像etcd的健康检查只支持ttl(服务向etcd定时重新PUT), 所以记得设置TTL并整一个Tick定时执行以上代码吧. 不过consul支持两种健康检查, 一种是ttl, 一种是consul主动去检查服务状态(详情看最底下 ↓ 的参考), 个...阅读全文

博文 2017-06-07 06:07:03 bysir

gRPC服务发现&负载均衡

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

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

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...阅读全文

iris-go

rt 与其它框架比较 文档说明 基础 index.html test

{{ message }}

main.go package main import ( "gopkg.in/kataras/iris.v6" "gopkg.in/kataras/iris.v6/adaptors/httprouter" "gopkg.in/kataras/iris.v6/adaptors/view" "time" "fmt" "io" ) type User struct {...阅读全文

博文 2017-06-04 14:03:33 中柠檬

etcd v3 服务注册与发现 Go代码

本文整理一下思路,编写示例(golang),以便加深etcd的理解 大致如下,监听程序为master,服务为service 1 service 启动时向etcd注册自己的信息,即注册到services/ 这个目录 2 service 可能异常推出,需要维护一个TTL(V3 使用 lease实现),类似于心跳,挂掉了,master可以监听到 3 master监听 services/ 目录下的所有服务,根据不同action(V3有put/delete),进行处理 service注册 提供 key(service name), value(serviceInfo)进行registered start 启动后,执行keeplive(), 维护心跳,挂掉时revoke() 同时监听 stop chan...阅读全文

博文 2018-01-13 00:30:00 sevenPP

Golang 微框架 Gin 简介

所谓框架 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个。 曾经我以为Python世界里的框架已经够多了,后来发现相比golang简直小巫见大巫。golang提供的net/http库已经很好了,对于http的协议的实现非常好,基于此再造框架,也不会是难事,因此生态中出现了很多框架。既然构造框架的门槛变低了,那么低门槛同样也会带来质量参差不齐的框架。 考察了几个框架,通过其github的活跃度,维护的team,以及生产环境中的使用率。发现Gin还是一个可以学习的轻巧框架。 Gin Gin是一个g...阅读全文

博文 2017-03-15 03:50:08 人世间

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-28 09:09:14 Francesc Campoy

一个go的API框架

# goweb 一个基于go语言开发API的工具,这个工具受到了SpringMVC的启发,结合了go语言本身的特性,整体比较简单,接下来,看看如何使用它。 下载安装: ``` go get github.com/alberliu/goweb ``` [TOC] ### 1.核心功能 #### 请求体参数注入 ```go package main import "github.com/alberliu/goweb" type User struct { Id int `json:"id"` Name string `json:"name"` } func handler(user User) User { return user } func main() { goweb.HandlePost...阅读全文

博文 2017-12-17 07:05:15 alberliu

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-31 01:00:02 liangDream

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-06-12 16:00:00 htyu_0203_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 ...阅读全文

博文 2014-10-08 17:00:00 Xiao_Qiang_

使用 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, 无若

使用client-go实现k8s操作

package main import ( "flag" "fmt" "k8s.io/client-go/1.4/kubernetes" "k8s.io/client-go/1.4/pkg/api" "k8s.io/client-go/1.4/pkg/api/unversioned" "k8s.io/client-go/1.4/pkg/api/v1" "k8s.io/client-go/1.4/tools/clientcmd" "log" ) var ( kubeconfig = flag.String("kubeconfig", "./config", "absolute path to the kubeconfig file") ) func main() { flag.Parse() ...阅读全文

博文 2016-12-21 00:00:02 yevvzi

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-11-06 13:56:46 傅小黑

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 04:00:04 kardianos

基于gokit的微服务项目骨架ko

前段时间发布了一个小小的web开发项目骨架morningo,性能与效率齐飞,开发速度在短暂时间熟悉go语言后应该是匹配php,ruby等这些脚本语言,而后期项目并发性能,基本并发到上千乃至上万tcp连接没问题。但从业务架构层面看,项目再发展,数据库存在瓶颈,单体项目耦合度高,可维护性差,可延展性差,存在很多问题。因而项目早期可以采用单体架构,但后期仍然推荐的是面向服务的分布式架构。分布式的架构模式虽然带来了增加的代码量,服务间沟通的成本,但整体项目更具有弹性,延展性更好。 项目地址:https://github.com/chenhg5/ko gokit介绍 go语言的优点不用赘述,那么基于go的微服务框架有吗?gokit就是一个go语言相关的微服务工具包。它自身称为toolkit,并不是fr...阅读全文

博文 2018-05-05 23:34:37 honhon

gin web框架解决跨域问题

 func Cors() gin.HandlerFunc { return func(c *gin.Context) { method := c.Request.Method if method == "OPTIONS" { c.JSON(http.StatusOK, "Options Request!") } origin := c.Request.Header.Get("Origin") var headerKeys []string for k, _ := range c.Request.Header { headerKeys = append(headerKeys, k) } headerStr := strings.Join(headerKeys, ", ")...阅读全文

博文 2018-01-08 11:54:34 hfyarvin

使用 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, 叶秀兰

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-26 15:00:02 u010026901

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服务器还添加了对优雅停机的支持,允许服务器...阅读全文

博文 2017-02-17 01:11:39 方圆