gin中间件的使用

在Gin框架中,中间件(Middleware)指的是可以拦截http请求-响应生命周期的特殊函数,在请求-响应生命周期中可以注册多个中间件,每个中间件执行不同的功能,一个中间执行完再轮到下一个中间件执行。 中间件的常见应用场景如下: 请求限速 api接口签名处理 权限校验 ... 提示:如果你想拦截所有请求做一些事情都可以开发一个中间件函数去实现。 1.使用中间件 func main() { r := gin.New() // 通过use设置全局中间件 // 设置日志中间件,主要用于打印请求日志...阅读全文

Segmentfault 2020-06-15 08:32:31 潇尘渊

33. 如何手动实现一个协程池?

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 在 Golang 中要创建一个协程是一件无比简单的事情,你只要定义一个函数,并使用...阅读全文

Segmentfault 2020-06-15 07:32:33 Python编程时光

Dubbo-gok8s注册中心设计方案与实现

Dubbo-go k8s注册中心设计方案与实现 随着云原生的推广,越来越多的公司或组织将服务容器化,并将容器化后的服务部署在k8s集群中。 今天这篇文章将会介绍dubbo-go将k8s作为服务注册中心的方案设计,以及具体实现。到目前为止该方案的实现已经被合并到dubbo-go的master分支。具体实现为关于Kubernetes的PullRequest。 k8s管理资源的哲学 k8s作为容器集群化管理方案可以将管理资源的维度可主观的分为服务实例管理和服务接入管理。 服务实例管理,主要体现方式为P...阅读全文

简书 2020-06-11 08:32:56 阿里云技术

今天,我们来聊一聊 Golang 中的 Slice(切片)

前言: 因为工作需要,最近接触 Golang 比较多。 也希望自己的技术栈能从一个 iOS 转变成 iOS / Golang。 那么,今天我们来聊一聊Golang中的数组(Array)和切片(Slice)。 一、Array(数组) 数组我们肯定都是熟悉的, 在Go语言中数组(Array)在初始化后,长度是固定的。 与其他语言类似,在这里举一些在Go中数组的简单demo。 var arr [10]int // 声明,len与cap为10,值默认补0。 arr := []int {1,2,3,4} ...阅读全文

简书 2020-06-11 08:32:53 齐舞647

使用Wails和Go创建图形桌面应用

众所周知,Go主要用于构建API,Web后端,CLI工具。但是除了这些,其实Go还可以做很多其它事情,比如开发桌面应用。 通过Wails框架,我们可以使用Go和Vue.js构建出桌面应用程序。 image 使用Wails开发桌面应用非常的容易,只需要使用简单的命令,我们就可以搭建出运行框架,而且打包应用非常简单,只需要一条命令就可以完成。 Wails提供了将Go代码和Web前端包装到一个二进制文件中的功能。通过Wails CLI,我们可以轻松处理项目的创建,编译和捆绑。 安装 我们可以使用go ...阅读全文

简书 2020-06-11 08:32:53 追梦人在路上不断追寻

GoLang GPM模型

前言 Goroutine & Scheduler goroutine 是什么?通常 goroutine 会被当做 coroutine(协程)的 golang 实现,但实际上,goroutine 并非传统意义上的协程,现在主流的线程模型分三种:内核级线程模型、用户级线程模型和两级线程模型(也称混合型线程模型),传统的协程库属于用户级线程模型,而 goroutine 和它的 Go Scheduler 在底层实现上其实是属于两级线程模型。 线程模型 优/缺点 内核级 用户级 混合型 优点 简单,真正并...阅读全文

简书 2020-06-11 08:32:52 YoJn

Go 每日一库之 twirp

简介 twirp是一个基于 Google Protobuf 的 RPC 框架。twirp通过在.proto文件中定义服务,然后自动生产服务器和客户端的代码。让我们可以将更多的精力放在业务逻辑上。咦?这不就是 gRPC 吗?不同的是,gRPC 自己实现了一套 HTTP 服务器和网络传输层,twirp 使用标准库net/http。另外 gRPC 只支持 HTTP/2 协议,twirp 还可以运行在 HTTP 1.1 之上。同时 twirp 还可以使用 JSON 格式交互。当然并不是说 twirp 比...阅读全文

Segmentfault 2020-06-14 19:32:39 darjun

今天,我们来聊一聊 Golang 中的 Slice(切片)

前言: 因为工作需要,最近接触 Golang 比较多。 也希望自己的技术栈能从一个 iOS 转变成 iOS / Golang。 那么,今天我们来聊一聊Golang中的数组(Array)和切片(Slice)。 一、Array(数组) 数组我们肯定都是熟悉的, 在Go语言中数组(Array)在初始化后,长度是固定的。 与其他语言类似,在这里举一些在Go中数组的简单demo。 var arr [10]int // 声明,len与cap为10,值默认补0。 arr := []int {1,2,3,4} ...阅读全文

掘金 2020年06月10日 齐舞647

Golang通过SSH执行交换机操作

Golang通过SSH执行交换机操作 ​ 简单实现通过输入指令,两步执行交换机命令。 输入执行换机的账号和密码。可以一次输入多个账号和密码,为了方便操作,规定了输入格式。如 用户名;主机IP;密码|用户名;主机IP;密码。举例admin;192.168.56.10;h3csw1|admin;192.168.56.11;h3csw2 输入要执行的命令,以;分割。例如system-view;dis cu; ​ 存在问题: 不够灵活。输入方式限制太死,输入特别字符也可能存在错误。 过于简陋。 功能简单...阅读全文

Go语言Mock使用基本指南

当前的实践中问题 在项目之间依赖的时候我们往往可以通过mock一个接口的实现,以一种比较简洁、独立的方式,来进行测试。但是在mock使用的过程中,因为大家的风格不统一,而且很多使用minimal implement的方式来进行mock,这就导致了通过mock出的实现各个函数的返回值往往是静态的,就无法让caller根据返回值进行的一些复杂逻辑。 首先来举一个例子 package task type Task interface { Do(int) (string, error) } 通过mini...阅读全文

Segmentfault 2020-06-14 14:32:34 Destiny池鱼

一次面试补充

#### 1 不好意思, 我之前所说关于interface compare 的问题, 我是记错了, 刚刚找到了以前的代码, 之前我所说的使用interface变量进行对比时, 可以帮你做深度内存对比(memcmp),可能是因为这段代码,golang 中的string类型被设计为值类型, 该类型进行比较时, 底层会帮你进行深度的内存比对, 当时不知道怎么想的就留下了那样的印象 ```go str := "loop" str1 := "li loop" str2 := fmt.Sp...阅读全文

Go语言中文网 2020-06-10 22:07:41 loop_0

elasticsearch 介绍入门(一)

介绍 Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。 Elasticsearch能做什么 当你经营一家网上商店,你可以让你的客户搜索你卖的商品。在这种情况下,你可以使用Elasti...阅读全文

Segmentfault 2020-06-12 09:32:35 code

promoted Unmarshal method on embedded field caused confusion 后续

encoding/json: promoted Unmarshal method on embedded field caused confusion 接上一篇,官方在早上给了回复: 简单解释下就是嵌入字段 Nested 的方法被提升了,导致 Object 的方法不会被执行,所以 Num 字段不会被 Unmarshal。跟上一篇中的解释差不多意思。但是官方给了两种更加优雅的解决这个问题的方式,让我们来欣赏下大佬的代码。 方法 a 代码中只需添加下面一行即可: var _ json.Unmarsh...阅读全文

掘金 2020年06月10日 hantmac

32. 理解 Go 语言中的 Context

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 1. 什么是 Context? 在 Go 1.7 版本之前,context 还是非编制的,它存...阅读全文

掘金 2020年06月10日 王一白

Go语言之 Redis

Redis驱动 推荐包https://github.com/astaxie/go...安装go get -u github.com/astaxie/goredis 上述驱动的源码地址,源码是最好的文档! 很香~~~ https://github.com/astaxie/goredis/blob/master/redis.go 实例代码 package main import ( "fmt" "github.com/astaxie/goredis" ) func main () { var cli...阅读全文

Segmentfault 2020-06-12 09:32:33 code

golang socket连接复用 - smux

今天来介绍一个socket连接复用的包 https://github.com/xtaci/smux 如图所示,多个channel输入通过smux合并在一个连接中,后端服务将连接中的channel分离出来进行处理 smux.jpg 场景分析 假设一个简单的使用场景,一个apiservice网关服务对外提供HTTP接口,后面还有一个rand随机数服务,对内提供随机数TCP接口。 客户端访问apiservice接口,apiservice连接randservice服务获取数据并返回。如果不做多路复用的话...阅读全文

简书 2020-06-10 10:32:59 写个代码容易么