go 关闭channel分析

背景 最近使用go开发后端服务,服务关闭需要保证channel中的数据都被读取完,理由很简单,在收到系统的中断信号后,系统需要做收尾工作,保证channel的数据都要被处理掉,然后才可以关闭系统。 后面我会给出方案,见示例代码,但在解决这个问题之前我们先了解下close channel的一些特性。 channel 关闭channel ch := make(chan bool) close(ch) close(ch) // 这样会panic的,channel不能close两次 向已经关闭的chan...阅读全文

阅读:7136 评论:0

go微服务

go-kit 入门 1. microservice Go-Kit go kit 是一个分布式的开发工具集,在大型的组织(业务)中可以用来构建微服务。其解决了分布式系统中的大多数常见问题,因此,使用者可以将精力集中在业务逻辑上。 2. go-kit 组件介绍 2.1 Endpoint(端点) Go kit首先解决了RPC消息模式。其使用了一个抽象的 endpoint 来为每一个RPC建立模型。 endpoint通过被一个server进行实现(implement),或是被一个client调用。这是很...阅读全文

2017-03-28 17:00:32 backtrackx
阅读:10672 评论:0

go依赖管理-govendor

Golang 官方并没有推荐最佳的包管理方案。到了1.5版本时代,官方引入包管理的设计,加了 vendor 目录来支持本地包管理依赖。官方 wiki 推荐了多种支持这种特性的包管理工具,如:Godep、gv、gvt、glide、govendor等。 下面简要介绍一个我在项目中用到的 -- govendor。该工具将项目依赖的外部包拷贝到项目下的 vendor 目录下,并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。对于 govendor 来说,依赖包主要有以下...阅读全文

阅读:41464 评论:3

golang 包依赖管理 godep 使用

[TOC] 介绍 godep是解决包依赖的管理工具,目前最主流的一种,原理是扫描记录版本控制的信息,并在go命令前加壳来做到依赖管理 godep 建议在 golang 1.6 以后使用 godep 依赖 vendor 具体查看 https://stackoverflow.com/questions/37237036/how-should-i-use-vendor-in-go-1-6 请做好 vendor 管理 安装 https://github.com/tools/godep  go get ...阅读全文

2017.05.26 14:17 泛原罪
阅读:9328 评论:0

初窥dep

Go语言程序组织和构建的基本单元是Package,但Go语言官方却没有提供一款“像样的”Package Management Tool(包管理工具)。随着Go语言在全球范围内应用的愈加广泛,缺少官方包管理工具这一问题变得日益突出。 2016年GopherCon大会后,在Go官方的组织下,一个旨在改善Go包管理的commitee成立了,共同应对Go在package management上遇到的各种问题。经过各种脑洞和讨论后,该commitee在若干月后发布了“Package Management ...阅读全文

六月 8, 2017 bigwhite
阅读:3783 评论:0

GitHub上优秀的Go开源项目

近一年来,学习和研究Go语言,断断续续的收集了一些比较优秀的开源项目,这些项目都非常不错,可以供我们学习和研究Go用,从中可以学到很多关于Go的使用、技巧以及相关工具和方法。我把他们整理发出来,大家有兴趣可以根据自己的爱好选择一些进行研究和阅读,提升自己的能力,更好的使用Go语言,开发出更优秀的项目。 docker无人不知的虚拟华平台,开源的应用容器引擎,借助该引擎,开发者可以打包他们的应用,移植到任何平台上。 https://github.com/docker/docker 38154 sta...阅读全文

Dec 27, 2016 飞雪无情
阅读:10549 评论:0

统一任务调度平台scheduler for golang

在企业项目开发中会定时执行对应的job,对于一些简单少的job可以直接使用调度器调度执行任务。当随着公司的业务越来越多,执行任务越来越多。那么直接使用任务调度器调度任务执行会变得臃肿,而且对于任务是动态配置不可实现。如:想某一个时刻停止任务的执行、删除此任务然后修改更新任务执行时间等,如某一个任务配置到多台机器上如何做到不可用时,进行转移等问题。 为了解决此类问题,我们需要对任务的调度和执行进行分开。有统一的任务调度中心-专门进行任务的调度分发任务工作,各个任务的具体任务执行分配到个个项目中。从...阅读全文

阅读:8513 评论:2

Golang依赖管理工具:glide从入门到精通使用

介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍gilde。 glide是Golang的包管理工具,是为了解决Golang依赖问题的。 为什么需要glide? 原因很简单,Go 语言原生包管理的缺陷。罗列一下golang的 get 子命令管理依赖有很多大缺陷: 能拉取源码的平台很有限,绝大多数依赖的是 github....阅读全文

2017-07-22 13:33:09 梦朝思夕
阅读:18358 评论:11

go依赖包管理工具对比

July 10, 2017 in Tech GOPATH和GOROOT GOROOT并不是必须要设置的。 GOPATH必须要设置,但并不是固定不变的 本项目内部的依赖 管理外部的依赖包 使用GOPATH来管理外部依赖 vendor godep glide govendor golang官方dep 各依赖管理工具对比 gvt vendor的问题 当开始真正用go去做项目的时候,不可避免的就会遇到依赖包的问题。go的依赖包管理与java+maven的依赖管理不太一样,我们从GOPATH开始逐渐理解其...阅读全文

阅读:41214 评论:0

最终,为什么选择go-kit

前言工作这些年,先后经历过两家公司,分别参与过php语言框架的设计和主导过golang技术栈的落地工作,在此过程中有一些感悟和总结。我想以之前我主导的golang技术栈为线索,来陈述当时遇到的一些问题,以及分析问题和解决问题的思路。主要目的是想陈述golang技术体系在我们团队中落地过程,分析我们在各个阶段中,遇到的一些问题,并將分析问题的思路和解决问题的方法记录下来,以便让后来的同学了解golang在团队的演进过程,吸取相关的经验,以便在今后的系统设计和开发上少走弯路。在系统不断演进的过程中,...阅读全文

2017.09.01 23:02 走天涯_4fce
阅读:8900 评论:3

在 Golang 中开发中使用 Makefile

使用 Golang 已经有一阵了,在 Golang 的开发过程中,我已经习惯于不断重复地手动执行 go build 和 go test 这两个命令. 不过,现在我已经摆脱了这个习惯。如果只用到了不带参数的简单命令,直接这么操作可能并不可怕。但是在一些复杂的任务中,如果依旧是手动执行 go build 和 go test ,就可能会成为一个让人头疼的事情。 我们可以通过其他方式解决这个问题。比如,可以用一个 bash 脚本来完成这些工作,或者一个更好的选择(至少对于我来说)是,写一个 makefi...阅读全文

2017.09.23 10:42* simple_the_best
阅读:13610 评论:0

Golang 中三种读取文件发放性能对比

Golang 中读取文件大概有三种方法,分别为: 1. 通过原生态 io 包中的 read 方法进行读取 2. 通过 io/ioutil 包提供的 read 方法进行读取 3. 通过 bufio 包提供的 read 方法进行读取 下面通过代码来验证这三种方式的读取性能,并总结出我们平时应该使用的方案,以便我们可以写出最优代码: package main import ( "os" "io" "bufio" "io/ioutil" "time" "log" ) func readCommon(pa...阅读全文

阅读:1408 评论:0

Go基础学习二

Go编程语言:支持并发、垃圾回收的编译型系统级编程语言! 一、go语言常用命令 go get 获取远程包(需提前安装git) go run 运行 go build 测试编译(package main 的文件) go fmt 格式化代码 go install 编译包文件和整个程序 go test 运行测试文件(**_test.go是测试文件,命名自己文件的时候需要注意) go doc 查看文档(本地官网 godoc -http=:8080 & 后台执行) 我们可以将go的官网放到本地: godoc...阅读全文

2017-09-24 11:34:44 Corwien
阅读:779 评论:0

【译】如何使用 Golang 中的 Go-Routines 写出高性能的代码

原文地址:How to write high-performance code in Golang using Go-Routines 原文作者:Vignesh Sk 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:tmpbook 校对者:altairlu 如何使用 Golang 中的 Go-Routines 写出高性能的代码 为了用 Golang 写出快速的代码,你需要看一下 Rob Pike 的视频 - Go-Routines。 他是 Golang...阅读全文

阅读:2582 评论:4

6 款最棒的 Go 语言 Web 框架简介

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/top-6-web-frameworks-for-go-as-of-2017/twitter_status.jpg) https://twitter.com/ThePracticalDev/status/930878898245722112 如果你只是想写一个自己用的小网站,或许你不需要框架,但如果你是要开发一个投入生产运营的网站,那么你肯定会需...阅读全文

2017-12-09 11:34:14 polaris
阅读:139485 评论:26

后端初始化 —— Go(全栈)开发企业级后台管理系统

Abstract: 终于要跟go语言沾边了,到此,作者还有点小小的兴奋呢,也不知道为啥! 不管你之前是否从事过web相关的开发,相信你一定听过【框架】这个词,不为什么,因为随着社会的发展进步,被前人总结出来的架构,经验等等,系统的、可复用的东西,我们都能认为其为框架。既然说到了框架,那么毫无疑问,我们这里要用框架了,不要问我为什么,因为时间宝贵,我们没有必要重复造轮子,当然如果你想自己写框架的话,那我这里要祝你好运! 平时在工作中会同时写python和go。截止目前, 用python的时间要比用...阅读全文

2017年11月12日 12:54:01 afar_ch
阅读:8970 评论:0

选择一个 Go 框架

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/choose-framework/heading.jpg) 每一天,或者是每隔几天,总有人来到 [/r/golang](https://www.reddit.com/r/golang/) ,并询问些类似如下的问题“哪个框架是最好的?”。我认为我们应该尝试提出这个问题,至少以一种容易理解的方式提出。你不应该使用框架。 对于一个复杂的问题,这也许是一个...阅读全文

2018-02-13 17:53:25 polaris
阅读:11768 评论:0

golang dep 依赖管理 使用

dep golang 包管理使用记录 dep 是 golang 项目依赖管理之一,是官方的实验项目,目前更新很频繁处于高速发展期,所以选 dep 作为 golang 的依赖管理器是比较靠谱的。(已知 glide 仅支持不再开发新功能) 目前 dep v0.5.0 release 已经发布,最新的 changelog 显示只支持 golang 1.9+ 以上的版本 golang 最原始的依赖管理是 go get ,执行命令后会拉取代码放入 src 下面,但是它是作为 GOPATH 下全局的依赖,并...阅读全文

2018.08.05 10:45* 一颗老柠檬丶
阅读:2159 评论:3