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
阅读:139492 评论:26

golang通用连接池的实现

golang的channel除了goroutine通信之外还有很多其他的功能,本文将实现一种基于channel的通用连接池。 何为通用? 连接池的实现不依赖具体的实例,而依赖某个接口,本文的连接池选用的是io.Closer接口,只要是实现了该接口的对象都可以被池管理。当然,你可以实现基于interface{}的连接池,这样任何对象都可以被管理。 实现原理 将连接句柄存入channel中,由于缓存channel的特性,获取连接时如果池中有连接,将直接返回,如果池中没有连接,将阻塞或者新建连接(没超...阅读全文

2018-02-01 20:34:37 xialeistudio
阅读:8669 评论:4

Golang 中的并发限制与超时控制

前言 上回在 用 Go 写一个轻量级的 ssh 批量操作工具 里提及过,我们做 Golang 并发的时候要对并发进行限制,对 goroutine 的执行要有超时控制。那会没有细说,这里展开讨论一下。 以下示例代码全部可以直接在 The Go Playground 上运行测试: 并发 我们先来跑一个简单的并发看看 package main import ( "fmt" "time" ) func run(task_id, sleeptime int, ch chan string) { time....阅读全文

2018.02.05 17:49 freedomkk_qfeng
阅读:2061 评论:0

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

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/understanding-the-context-package-in-golang/0_exTPQ4ppfrdjuXcR.jpg) Go 中的 context 包在与 API 和慢处理交互时可以派上用场,特别是在生产级的 Web 服务中。在这些场景中,您可能想要通知所有的 goroutine 停止运行并返回。这是一个基本教程,介绍如何在项目中使用它以...阅读全文

2018-07-29 00:20:23 themoonbear
阅读:38022 评论:3

shuffle 洗牌算法

1.Fisher–Yates Shuffle(费雪耶兹 随机置乱算法)   算法思想就是从原始数组中随机抽取一个新的数字到新数组中。算法英文描述如下: Write down the numbers from 1 through N. Pick a random number k between one and the number of unstruck numbers remaining (inclusive). Counting from the low end, strike out th...阅读全文

阅读:4546 评论:1

Go 语言的 Modules 系统介绍

即将发布的 Go 语言 1.11 版本将会给我们带来对 *modules*(模块)的实验性支持,这是 Go 语言新的一套依赖管理系统。 (译注:很多编程语言中,把 modules 译作「模块」,但由于目前该机制在 Go 语言还没正式发布,因此尚未有非常普及的译法。而类似的 vendor 一词的翻译,大多中文文章都是采取保留英文原文的方式处理,因此本文对 modules 的翻译参考 vendor 的处理:保留英文原文) 前些日子,[我简单地写了一编关于它的文章](https://rob...阅读全文

2018-08-23 18:37:30 Alex-liutao
阅读:10754 评论:14

Go 中的优雅升级

优化升级背后的想法是在进程运行过程中,在用户无感知的情况下对程序的配置和代码进行更换(升级)。尽管这听起来很危险、容易出错、不可取,并且像是一个馊主意 - 事实上我(的想法)和你一样。 但是,有些时候你的确需要它们。这通常在一个没有负载均衡层的环境中会遇到这种问题。我们在 *Cloudfare* 也遇到了这种情况,这使得我们必须研究这类问题、并尝试、实现各类的解决方案。 ![](https://raw.githubusercontent.com/studygolang/gctt-image...阅读全文

2018-11-20 10:17:09 barryz
阅读:12271 评论:1

Go语言字符串高效拼接(一)

在我们变成的时候,和字符串打交道是必不可少的,我们对数据库里文本的处理,Web文本的显示,文本数据的存储等都需要和字符串打交道,那么对于字符串来说,查找、拼接这些都是常用的操作,尤其是以拼接使用的比较多,比如把一个人的姓名和年龄拼接在一起显示。 在Go语言(golang)中,对于字符串的拼接处理有很多种方法,那么那种方法才是效率最高的呢?因为内存很贵、性能很重要,有时候不慎字符串的转换和拷贝,就可以把你的内存吃光,性能低下,不得不考虑。 一个例子 对于任何功能、性能、方法的研究,没有比例子更有说...阅读全文

2018年10月28日 飞雪无情
阅读:1264 评论:0

Go语言字符串高效拼接(二)

在上一篇关于字符串拼接的文章 Go语言字符串高效拼接(一) 中,我们演示的多种字符串拼接的方式,并且使用一个例子来测试了他们的性能,通过对比发现,我们觉得性能高的Builder并未发挥出其应该的性能,反而+号拼接,甚至strings.Join方法的性能更优越,那么这到底是什么原因呢?今天我们开始解开他们神秘的面纱,解开谜底。 在开始前给大家送个福利。阿里云双11拼团活动,战队已达数百人,有资格瓜分百万奖金,赶紧加入 。现在加入即可享受最低1折,1年99元的云主机,还可以参与瓜分百万奖金,先邀请再...阅读全文

2018年11月5日 飞雪无情
阅读:1073 评论:0

Go语言字符串高效拼接(三)

在上一篇关于字符串拼接的文章Go语言字符串高效拼接(二) 中,我们终于为Builder拼接正名了,果真不负众望,尤其是拼接的字符串越来越多时,其性能的优越性更加明显。 在上一篇的结尾中,我留下悬念说其实还有优化的空间,这就是今天这篇文章,字符串拼接系列的第三篇,也是字符串拼接的最后一篇产生的原因,今天我们就看下如何再提升Builder的性能。关于第一篇字符串高效拼接的文章可点击 Go语言字符串高效拼接(一) 查看。 Builder 慢在哪 既然要优化Builder拼接,那么我们起码知道他慢在哪,...阅读全文

2018年11月11日 飞雪无情
阅读:1883 评论:0

GO Modules 使用

旧项目迁移,打算使用GO Modules 作为依赖管理。go版本 1.12私人依赖包,如何处理1. 创建模块的目录 ,并伸出go.mod 文件 mkdir modules go mod init modules 2. 创建自己的package目录 如 base module |--- main.go |---go.mod |---base |---testBase.go 其中main.go 的内容 package main import "modules/base" func main(){ b...阅读全文

2019.02.28 15:52 起名好难_b30f
阅读:2934 评论:4

Windows环境下gRPC安装

安装Protobuf在https://github.com/protocolbu... 下载protoc的安装程序,选择合适的版本,目前最新版本是protoc-3.8.0-win64.zip,下载解压后,将protoc.exe拷贝至放入到GOPATH\bin目录下 安装grpc由于国内的网络环境无法通过执行go get google.golang.org/grpc命令直接安装,只能通过如下方式进行安装:创建google.golang.org相关目录 在GOPATHsrc目录下创建google.g...阅读全文

2019-06-24 19:02:32 sphinxscepter
阅读:1378 评论:0

beehive 源码阅读- go 语言的自动化机器

beehive Overview 看一下作者本人的注释 // Package bees is Beehive's central module system. beehive 非常有趣的在于各逻辑的解耦设计,这不仅让本身功能操作简单,也让扩展变得关注点少了很多,只需要一点学习成本就可以扩展自己的 beehive 首先解释一下 bee hive 中 的概念 bee 代表的是我们常见的 Worker 也就是说,实际的行为是由这些 小蜜蜂执行的。他们就类似于采蜜的工人,采集到了之后统一放回来处理 hi...阅读全文

阅读:1146 评论:1

一款炫技的监控系统-Prometheus+Grafana安装记

一、前言:   之前部门用的zabbix 2.0版本的监控系统年事已高,看着那古老又单调的界面真是一点兴趣都没有。正好最近在学习k8s,偶然间看到一篇文章介绍了使用(Prometheus+Grafana)搭建的监控系统,页面很炫,本着喜新厌旧,颜值即正义,特地搭建了个研究研究,毕竟学习使我快乐! 二、Prometheus(普罗米修斯)的特点简介:   用过zabbix的朋友应该知道,它是用C(agent/server端)+PHP(前端)+Mysql(存储)的架构。本司1800+主机,8W+的监控...阅读全文

阅读:2658 评论:0

基于图搜索Go建云顶之弈S1版本最强羁绊(完整版)

cover.jpg 本文希望读者玩过云顶之弈,不懂编程的可以直接拉到最下面去看结论,懂编程的希望你了解递归、分治、图、堆这些基本概念,并掌握Python或者Go语言。 代码已公开在github上:https://github.com/weiziyoung/TFT ,转载请注明来源。 今天是11月11日,首先恭喜FPX一顿摧枯拉朽横扫G2, 拿下S赛冠军!证明了LPL是世界第一赛区,也让电竞作为一种赛事在这代人心中铭记。本届S赛结束,也就意味着,S8告一段落,S9即将上线。而云顶之弈作为今年刚出的...阅读全文

阅读:8031 评论:1