gomonkey私有方法打桩

ApplyMethod基于反射实现,无法对私有方法打桩,本文将解决这一问题。

Golang程序设计——函数

本文学习Go语言函数知识。函数是基本的代码块,用于执行一个任务。在Go语言中,函数可以接收数量不固定的参数,也可以返回多个结果。

函数结构

在编程领域,函数向编译器和开发者提供了有关的信息,这些信息指明了函数该接收什么样的输入以及会产生什么样的输出。这些信息是通过函数第一行提供的,第一行称为函数签名。

Go语言声明函数语法如下:

Golang程序设计——数据容器

本文学习Go语言数据容器、包括数组、切片和映射。

数组

数组是一个数据集合,常用于存储用数字索引的同类型数据。Go语言的数组调用函数时使用的是值传递,因此形参会拷贝一份实参的值。

在Go语言中,声明数组需要同时指定长度和数据类型,数组长度是其类型的一部分,因此[5]int[1]int是两种类型。

Golang程序设计——基本语法

本文学习Go语言基本语法,例如变量和常量、数据类型、运算符、条件语句、循环语句。

变量和常量

变量和常量是计算机程序不可或缺的部分。本节将介绍如何在Go程序中声明、使用变量和常量、还将介绍声明方式和作用域。

变量声明

在Go语言中,声明变量的方式有多种。在前面的文章介绍过,Go语言是一种静态类型语言,因此声明变量时必须指明其类型。

Go语言程序设计

Go语言概述

语言历史

Go语言也称为Golang,是由Google公司开发的一种静态强类型、编译型、语言原生支持并发、具有垃圾回收功能的编程语言。起源于2007年,并在2009年正式对外发布。Go语言是非常年轻的一门语言,它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C++等编译型语言的性能与安全性”。

Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可以进行网络编程、系统编程、并发编程等等。

Go语言的推出,旨在不损失应用程序性能的情况下降低代码的复杂性,具有“部署简单、并发性好、语言设计良好、执行性能好”等优势。

golang依赖注入工具wire指南

wire与依赖注入

Wire 是一个的Golang依赖注入工具,通过自动生成代码的方式在编译期完成依赖注入,Java体系中最出名的Spring框架采用运行时注入,个人认为这是wire和其他依赖注入最大的不同之处。

依赖注入(Dependency Injection)也称作控制反转(Inversion of Control),个人给控制反转下的定义如下:

Golang组件化网络服务器框架Halia指南

写在前面

netty框架面世之前,几乎没有一个成熟的OOP/组件化规范指导网络服务器开发,一些常用的FrameDecoder,BusinessHandler等等组件紧密耦合在了项目当中,整个项目可以说扩展性比较差。

netty的出现可以说是划时代的,基于OOP/组件化屏蔽了底层 BlockingIO/NonBlockingIO/AsynchrousIO之间的差异,各种组件可以无缝切换,网络服务器开发效率有了非常大的提高。

通过阅读netty源码,以及核心组件的架构,基于Golang进行了实现,至此,Golang的Halia框架面世了!

Golang Http 验证码示例

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

一起学context(二)——超时控制

上一篇文章讲到如何使用context来传值,实际上context还有另外一个重要功能——goroutine的超时控制。
很多时候goroutine如果不设超时,一旦发生阻塞将无限等待,协程数会越来越多,导致耗尽服务器内存。

分类

拥有超时控制的context有以下几种:

一起学context(一)——上下文值传递

系列开篇

本文开始将针对context的用法进行系统化讨论,在这里你将能够在工作中合理使用context解决一些比较棘手的问题。

context处理超时处理之外还可以用来保存数据,当你需要在多个上下文传递时传递数据,那么本文提到的知识可以排上用场。

示例代码

示例代码为一个简单的http服务,流程是登录之后会跳转首页,首页通过guard中间件进行鉴权。当然,示例代码未做其他诸如连接数据库之类的处理,这不是本文的重点。
守卫函数读取cookie之后将cookie值写入context并向下传递,在整个请求中可以说是“透明”的。当访问到需要保护的接口时检测到没有提供cookie,则直接终端请求,否则通过r.WithContext将username的值存入cookie,避免的业务接口直接读取cookie的弊端。因为如果后期更改鉴权算法的话,业务代码可以不用更改,直接更改中间件即可。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×