golang 架构设计原则 接口隔离原则

golang 架构设计原则 接口隔离原则 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 该书以java语言演绎了常见设计模式 本系列笔记拟采用golang练习之 接口隔离原则 接口隔离原则(Interface Segregation Principle, ISP)指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。设计接口时,应当注意以下几点: (1)一个类对另一个类的依赖应该建立在最小接口上。 (2)建立单一接口,不要建立庞大臃肿的接口。 (3)尽量细化...阅读全文

分布式架构:限流算法的分析与实现

推荐阅读: 我总结了72份面试题,累计3170页,斩获了30+互联网公司offer(含BATJM) 2020首战告捷,这份Java面试神技Plus版,让我成功拿到了阿里、京东、字节跳动等大厂offer 膜拜!阿里内部都在强推的K8S(kubernetes)学习指南,不能再详细了 一、限流的关键作用 对于大型互联网架构中,限流的设计是必不可少的一个环节。在给定的时间内, 客户端请求次数过多, 服务器就会拦截掉部分请求,避免请求流量过大造成数据库负载高的问题。 二、常见限流算法利弊分析 计数器限流 ...阅读全文

简书 2021-01-27 18:32:52 Java入门到入坟

golang 架构设计原则 迪米特法则

golang 架构设计原则 迪米特法则 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 该书以java语言演绎了常见设计模式 本系列笔记拟采用golang练习之 迪米特法则 迪米特法则(Law of Demeter, LoD)又叫作最少知道原则(Least KnowledgePrinciple, LKP),指一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合。 _ 场景 TeamLeader每天需要查看未完成的项目任务数 TeamLeader指派TeamMember进...阅读全文

死磕hyperledger fabric源码|Order节点概述

死磕hyperledger fabric源码|Order节点概述 文章及代码:https://github.com/blockchainGuide/ 分支:v1.1.0 bcc633a6c26528720cf16ed170f6a141 前言及源码目录 Orderer排序节点这块内容主要包括了节点启动流程、Broadcast广播交易服务、Orderer共识排序服务以及Deliver区块分发服务。其相关源码目录文件如下: /orderer |-common ​ |-blockcutter:交易切割打...阅读全文

简书 2021-01-27 18:32:47 mindcarver

GO 微服务GO-Micro(13)-串联我们的整个微服务(前篇-环境和服务准备)

说明 从前面的流程看,我们似乎已经差不多把一个微服务的开发流程给实施了,一遍,当然真正的微服务开发中还会涉及自身业务处理,上面只是简单的一些请求示例的处理,而且复杂的微服务的开发等更多业务逻辑处理,而且还缺少对微服务的包含微服务组件网关、配置中心、熔断器以及具体服务如何融合起来。 基于上述的说明,我重头开始梳理一次我的开发过程,也方便自己后续回头看看。比较我是一个小白,容易忘事! 参考资料 参考:https://github.com/xbox1994/go-micro-example 此示例是m...阅读全文

简书 2021-01-27 18:32:42 小钟钟同学

中国身份证号验证库

> [id-validator](https://github.com/guanguans/id-validator) - 中国身份证号验证库。 ## 功能 * 中国身份证号验证 * 获取身份证号信息 * 升级 15 位身份证号为 18 位 * 伪造符合校验的身份证号 ## 安装 ``` shell script $ go get -u github.com/guanguans/id-validator ``` ## 使用 这只是一个快速介绍, 请查...阅读全文

Go语言中文网 2021-01-27 14:55:00 guanguans

64位平台下,指针自身的大小为什么是8字节?

系列导读本系列基于64位平台、1Page=8KB今天我们开始拉开《Go语言轻松系列》第二章「内存与垃圾回收」的序幕。关于「内存与垃圾回收」章节,大体从如下三大部分展开:知识预备:为后续的内容做一些知识储备,知识预备包括指针的大小Tcmalloc内存分配原理Go内存设计与实现Go的垃圾回收原理本篇前言第一部分知识预备的第一个知识点指针的大小。为什么指针的大小会作为一个知识点呢?因为后续内存管理的内容会涉及一些数据结构,这些数据结构使用到了指针,同时存储指针的值是需要内存空间的,所以我们需要了解指针...阅读全文

Segmentfault 2021-02-01 18:32:32 .container .car 等

由浅到深,入门Go语言Map实现原理

导读Go源码版本1.13.8今天要分享的是主要内容是Go语言Map底层实现,目的让大家快速了解Go语言Map底层大致的实现原理。读完本篇文章你可以获得收益、以及我所期望你能获取的收益如下:收益序号收益描述掌握程度收益1大致对Go语言Map底层实现有一个了解必须掌握收益2大致知道Go语言Map是如何读取数据的必须掌握收益3熟悉Go语言Map底层核心结构体hmap可选收益4熟悉Go语言Map底层核心结构体bmap可选收益5熟悉Go语言Map底层里的溢出桶可选收益6熟悉Go语言Map是如何读取数据的可...阅读全文

Segmentfault 2021-02-01 13:32:35 .container .car 等

Go遍历struct,map,slice

遍历结构体如何实现遍历结构体字段? 好吧,言归正传!举个例子:demo1:package main import ( "fmt" "reflect") type Student struct { name string age int} func main() { v := reflect.ValueOf(Student{"乔峰", 29}) count := v.NumField() for i := 0; i < count; i++ { f := v.Field(i) //字段值 swit...阅读全文

51CTO博客 2021-01-27 09:34:16 mb600beb5e8f23b

go-carbon 1.2.6 版本发布,优化错误处理机制,弃用出错直接panic的粗暴处理方式

carbon 是一个轻量级、语义化、对开发者友好的Golang时间处理库,支持链式调用、农历和gorm、xorm等主流orm 如果您觉得不错,请给个star吧 github:[github.com/golang-module/carbon](https://github.com/golang-module/carbon "github.com/golang-module/carbon") gitee:[gitee.com/go-package/carbon](https://g...阅读全文

Go语言中文网 2021-01-27 09:39:40 gouguoyin

go-carbon 1.2.4 版本发布,新增系列时间比较方法

carbon 是一个轻量级、语义化、对开发者友好的Golang时间处理库,支持链式调用、农历和gorm、xorm等主流orm 如果您觉得不错,请给个star吧 github:[github.com/golang-module/carbon](https://github.com/golang-module/carbon "github.com/golang-module/carbon") gitee:[gitee.com/go-package/carbon](https://g...阅读全文

Go语言中文网 2021-01-27 09:37:52 gouguoyin

GO 语言入门(一)

GO 语言入门(一)本文写于 2020 年 1 月 18 日Go 由 Google 工程师 Robert Griesemer,Rob Pike 和 Ken Thompson 设计的一门编程语言,第一个版本于 2012 年 3 月作为开源发布。它是一种静态类型的并发型编译语言,并具有垃圾回收功能。Go 语言支持交叉编译,即可在 Windows 上编译 Linux 版本、Mac 上编译 Windows 版本。Go 的语法接近 C 语言。与 C++相比,Go 并不包括如枚举、异常处理、继承、泛型、断言...阅读全文

51CTO博客 2021-01-27 09:31:40 mb600beb5e8f23b

go语言学习(五):通道的用法

go语言的作者Rob Pike认为,不要通过共享内存来实现通信,而应该通过通信来共享内存。多个goroutine之间可以通过通道来传递数据。通道是并发安全的,类似于一个FIFO的队列。go语言的通道定义需要使用make语句,如下,定义了一个存放3个int类型元素通道并向通道中输入了3个元素。同时用for循环取出。 func main() { ch1 := make(chan int, 3) ch1 <- 2 ch1 <- 1 ch1 <- 3 close(ch1) for elem1 := ra...阅读全文

51CTO博客 2021-01-26 20:23:42 mb5fed72b60246f

go语言学习(四):数组和切片

在go语言中,数组和切片都是集合类型,他们都是用来存储同一种类型的元素。 1.数组类型的长度是固定的,而切片类型的长度是可变长的。如下面代码声明一个长度为5的数组s1和长度为5的切片s2, s1 := [5]int{1,2,3,4,5} s2 := []int{1,2,3,4,5} 但是s1是不可变的,而s2是可变的,可以增加元素,长度随着元素数量而增长。因此数组是一个值类型,而切片是一个引用类型。 2.切片的底层是一个数组,如下面代码:s3是s4的底层数组, s3 := []int{1, 2,...阅读全文

51CTO博客 2021-01-26 20:22:21 mb5fed72b60246f

go语言学习(三):源码文件

go语言的源码文件包括命令源码文件、库源码文件和测试源码文件。 命令源码文件是程序执行的入口,属于main包,包含无参数无返回结果的main函数,同java类似,同一个包下面不建议存放多个main函数。命令源码文件编译或安装后生成可执行文件,存在当前执行命令的目录下。 库源码文件用于存放供其他代码使用的程序实体,构建时进行检查和验证,生成临时文件,安装时生成归档文件,存放在当前工作区的pkg目录。 测试源码文件主要存放测试相关的源码文件,包括功能测试、性能测试、程序运行示例等。 下面详细讲一下命...阅读全文

51CTO博客 2021-01-26 20:18:28 mb5fed72b60246f