熊喵君的博客

Thinking will not overcome fear but action will.

玩转正则表达式(进阶篇)

贪婪 or 非贪婪,Python 版本

0x00 前言    本文介绍一些正则表达式 (Regular Expression) 一些很有趣(实用)的语法。 0x01 问号的用法(?)    来看看 Wikipedia 中对问号(?)的解释: 非贪心量化(Non-greedy quantifiers):当该字符紧跟在任何一个其他重复修饰符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式...

Golang 的 Channel(应用篇)

如何使用 channel 开发有保证的应用

0x00 前言 channel 是 golang 提供的非常有趣且实用的功能,基于 channel 和 goroutine 一起配合可以实现非常实用的功能。如 生产 - 消费者模型、Pipe 等。 对下面这两句话的理解,从初学到现在,已经有了极为深刻的理解: Do not communicate by sharing memory; instead, share mem...

Raft 协议分析与实战(理论篇)

Raft:一种更容易理解的共识算法

0x00 前言 本文是对于 Raft 协议原理的一些总结。原文 在此 Raft implements consensus by first electing a distinguished leader, then giving the leader complete responsibility for managing the replicated log. The leade...

Golang Slice 那些事

Slice 最佳实践

Golang 是宣扬实用主义的语言,很多时候都把 C 中的最佳实践直接规定成语法了。Slice 就是其一,简单但是及易踩坑 Slice 第一法则:防止共享数据 Golang 里面所有的类型都是值类型,之所以有些用起来像引用,是在于该类型内部是用指针实现的,但是其本质就是包含指针的结构体 0x00 Slice 与 Array Slice 与 Array 的区别在于...

Perl 单行特技(One-Line)

神奇的胶水语言 Perl 文本处理

0x00 前言    在日常处理文本时,Perl 的单行模式非常有用。本文介绍下强大的单行特技。 与 One-Line 相关的参数 -a 自动分隔模式,用空格分隔 $ 并保存在 @F 中,也就是 @F=split //, $ -F 指定 - a 的分隔符 -l 对输入的内容进行自动 chomp,对输出的内容自动加换行符 -n 相当于 while(<>) -...

gRPC 应用篇之 Resolver 接口封装

如何封装 gRPC 的 Resolver(Kratos)

本篇文章分析下,Kratos 中如何封装 gRPC 中服务发现的接口,已经在项目中是如何使用的。 0x00 再看 gRPC 的 Resolver(解析器)接口 1.1 Resolver 暴露的三个接口 前文说过,gRPC 内置的服务治理功能,对开发者暴露了服务发现的 interface{},resolver.Builder 和 resolver.ClientConn 和 res...

gRPC 源码分析之 Picker 篇

gRPC 客户端选择器实现分析

0x00 再看 RR-Picker 实现    前文中分析了官方提供的轮询 Picker 代码,我们可以使用 gRPC 提供的 balancer 包中的接口实现自定义的选择器 Picker,也就是自定义的负载均衡逻辑,只需要三步即可。这篇文章,讨论下,我们自己实现的 Picker 逻辑是如何 gRPC 中生效的。 一个 RR-Picker 实现步骤    一个简单的实现如下所示: 第...

Hashcorp Vault 使用

更安全的 Secret 存储系统:vault

0x00 前言 我们在工作中是如何管理大量的 Secret 信息的?(比如笔者的项目中会涉及到对 OpenSSH 的秘钥及口令存储、以及对此的定时轮转及外部调用) 以配置文件的形式固化,存放于服务器文件或者 Database 中 以代码的方式存在于 git 私有仓库上,并严格控制此库的访问权限 以 KMS(Key Management Service,云服务居多)方式托管在...

Golang IO copy 系列方法探究

golang-IO 包使用经验(二)

0x00 前言 前文 神奇的 Golang-IO 包,介绍了 io.Copy()、io.Pipe() 等方法的使用,本文再对近期项目中笔者使用的 io 方法做一次深入总结。 0x01 再看文件复制 使用 golang 完成文件复制,通常有下面几种方法: 1、 使用 ioutils 库的 ReadFile 及 WriteFile,一次性将文件读取到内存,大文件场景不合适 fu...

神奇的 Golang-IO 包

golang-IO 包使用经验(一)

0x01 Golang 的 io 包介绍 在 golang 中,标准库中的 package 设计的基本原则是职责内聚。通常开发者可以使用自定义 Wrapper 的方式来封装标准库 package 中的 interface 接口,亦或在此基础上扩展,添加自定义的功能。N但是有一点,返回值必须封装的方法保持一致 0x02 神奇的 io.Copy io.Copy 的好处 io.Copy(...