golang 架构设计原则 里氏替换原则

golang 架构设计原则 里氏替换原则 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 该书以java语言演绎了常见设计模式 本系列笔记拟采用golang练习之 里氏替换原则 里氏替换原则(Liskov Substitution Principle, LSP): 如果对每一个类型为T1的对象O1 都有类型为T2的对象O2 使得以T1定义的所有程序P 在所有对象O1都替换成O2时 程序P的行为没有发生变化 那么类型T2是类型T1的子类型 _ _可以理解为: _ 所有引用父类的地方...阅读全文

idea中搭建Golang环境(Windows版)

Golang学习笔记1、环境搭建---------IDEA+Go SDK 1.14 for Windows下载 Go SDK下载网址<<<猛戳这里进入下载页面后,根据操作系统选择下载的版本,我本次使用的是 Windows 10系统,所以直接选择 go1.14.windows-amd64.msi下载。 下载完成之后,双击下好的安装包进行安装。 双击之后,弹出安装界面,我们直接一路next,这里我选择的安装路径是 D:\Program Files\go 继续点击next,等待安装成功 读完进度条之后...阅读全文

每位 Gopher 都应该了解的 Golang 语言的垃圾回收算法

转载:每位 Gopher 都应该了解的 Golang 语言的垃圾回收算法 介绍 关于垃圾回收,比较常见的算法有引用计数、标记清除和分代收集。Golang 语言使用的垃圾回收算法是标记清除。本文主要介绍一下 Golang 语言的垃圾回收算法。 Golang 语言 v1.3 及之前的垃圾回收 - 标记清除 Golang 语言的标记清除垃圾回收算法,为了防止 GC 扫描时内存变化引起的混乱,那么就需要 STW,即 Stop The World,具体在 Golang 语言中是指,在 GC 时,先停止所有...阅读全文

简书 2021-01-28 17:32:46 Vicky丶云

程序员必知的几种限流方案

限流简介 现在说到高可用系统,都会说到高可用的保护手段:缓存、降级和限流,本博文就主要说说限流。限流是流量限速(Rate Limit)的简称,是指只允许指定的事件进入系统,超过的部分将被拒绝服务、排队或等待、降级等处理。 对于server服务而言,限流为了保证一部分的请求流量可以得到正常的响应,总好过全部的请求都不能得到响应,甚至导致系统雪崩。限流与熔断经常被人弄混,博主认为它们最大的区别在于限流主要在server实现,而熔断主要在client实现,当然了,一个服务既可以充当server也可以充...阅读全文

简书 2021-01-28 17:32:45 Java斗帝之路

golang 互斥锁的两种实现

如果一个程序高并发且多线程运行的话,并且数据不加什么处理就有可能会导致数据错乱,为了让结果和我们预期的相符合,往往我们需要做一些处理来保证数据的正确性,下面就来介绍两种方式: 1) 互斥锁(sync.Mutex) 2) chan(通道) 下面先来看一段代码: package main import ( "fmt" "sync" ) var num int var wg sync.WaitGroup func add() { defer wg.Done() num += 1 } func main...阅读全文

简书 2021-01-28 17:32:39 你的酒馆对我打了烊_呵呵呵

身份证号验证库

id-validator - Go 版中国身份证号验证库。功能中国身份证号验证获取身份证号信息升级 15 位身份证号为 18 位伪造符合校验的身份证号安装$ go get -u github.com/guanguans/id-validator使用这只是一个快速介绍, 请查看 GoDoc 获得详细信息。package main import ( idvalidator "github.com/guanguans/id-validator" "gopkg.in/ffmt.v1" ) func ma...阅读全文

Segmentfault 2021-02-01 11:32:33 .container .car 等

go语言反射的使用

reflect.ValueOf(i interface{})reflect中ValueOf能够将变量转化为reflect.Value类型reflect.Value 表示变量的实际值,如果接口为空则返回0。reflect.Value类型提供了Kind()方法,获取变量实际的种类。reflect.Value类型提供了Type()方法,获取变量实际的类型,此时可以类比于TypeOf()var i intvalue := reflect.ValueOf(i) fmt.Println(value) // ...阅读全文

51CTO博客 2021-01-27 22:59:25 mb600beb5e8f23b

Go 中使用 JSON 时,如何区分空字段和未设置字段

微信搜索 “吴亲强的深夜食堂”,关注公众号,回复 "微信",加好友拉群一起学习。几周前,我正在开发一个基于 Golang 的微服务项目,需要在其中添加对 JSON 数据的 CRUD 支持。通常,我会为实体构建一个结构,其中包含定义的所有字段以及 “omitempty” 属性。type Article struct { Id string `json:"id"` Name string `json:"name,omitempty"` Desc string `json:"desc,omitempt...阅读全文

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

我想和你聊聊:FreeTSDB不只是InfluxDB集群

FreeTSDB-v0.0.2(https://github.com/freetsdb/freetsdb)发布了!它是第一个,也是唯一一个支持InfluxDB企业版原生集群能力的开源系统。它彻底解锁了大家期待的各种分布式姿势,针对META节点和DATA节点数据特点的不同,设计了2种不同的分布式模型,META节点的CP模式,DATA节点的AP模式,并支持水平扩展、自定义一致性级别等。众所周知,高可用、水平扩展的InfluxDB分布式集群能力是InfluxDB企业版的护城河,数年来,虽多个团队在跟进...阅读全文

简书 2021-01-28 06:32:37 hanj4096

golang实现http代理服务器

http代理一般用于突破网络限制和加速网络用,其原理就是代转发请求和回应。 http流量,未加密,可以直接从请求头中获得要访问目标的地址,代理服创建一条访问目标的tcp连接,将http流量相互转发即可 https流量,由于加密,无法读取内容,所以多出一个CONNECT请求(我们最经常接触的是GET,POST),客户端会先向代理服发送CONNECT请求,CONNECT请求会带上要访问目标的地址,代理服创建一条访问目标的tcp连接,相互转发流量即可 具体实现:https://github.com/0...阅读全文

简书 2021-01-28 06:32:37 小风吹的我乱了

golang判断文件或文件夹是否存在

go判断文件或文件夹是否存在 文件/文件夹是否存在 /** * function 判断文件/文件夹是否存在 * param path: 文件/文件夹的路径 * return bool:true存在,false不存在 * error:存在返回nil,不存在返回错误 */ func FileAndDirIsExistCommonService(path string) (bool, error) { fileInfo, erByStat := os.Stat(path) if erByStat !=...阅读全文

简书 2021-01-28 06:32:37 我是不会赢的

让你的Golang项目在IDE里跑起来(Goland使用入门-GOROOT、GOPATH、src、

前言每次新建项目,不熟悉go的项目结构,一般跑都跑不起来,每次都要重新搞一遍,好几回跑项目都会报类似File is invalid的错误有时候报其他奇怪的错误,今天就下决心整理一下,理一理概念 GOROOT、GOPATH、src、 pkg、bin,希望以后不要再出现这样的问题了,同时给看到文章的你一些帮助。熟悉golang项目目录结构要想让你的程序跑起来,要按照这样的目录结构,正常情况下有三个目录:|--bin|--pkg|--src其中,bin存放编译后的可执行文件;pkg存放编译后的包文件;...阅读全文

51CTO博客 2021-01-27 14:06:16 mb5ff40ceab21c4

golang 指针讨论

好几天没有更新了,因为小熊给老板打了包票,要把 10 天的工作,压缩在 5 天,怎么压缩,靠加班咯。今天回家以后连不上那几台服务器,加班不成,写写文章。这两天特别惨,我的眼镜还丢了,上班只能靠很近才能看清。本来申请的显示器,被配送员送到其他同事那里了,结果那同事明知道箱子上的名字不是自己的还拆开用,要等明天才有的用了。我怎么这么倒霉??go 语言的教程拖拖拉拉写了好久了,本身比较简单,按部就班的写影响到了我的学习进度,所以我要加速度了,从这一篇开始。话不多说现在开始。指针c 中有指针的概念,在 ...阅读全文

51CTO博客 2021-01-27 11:52:26 mb5ff40ceab21c4

golang 结构体的思考

小熊工作做不完了,周末又要加班了, c++ 项目好不容易在不同的指令集编译出来,结果一跑就挂,连日志都没有,难受!go 语言中的结构体和 c++ 的结构体类似,如下定义一个结构体类型。type Body struct { name string age int}像这样就可以使用var body Bodybody.name = "coding3min"body.age = 12fmt.Println(body)输出{coding3min 12}go 中的类结构体在 go 中是最常用的一种语法,有没...阅读全文

51CTO博客 2021-01-27 11:51:06 mb5ff40ceab21c4

golang异常处理详解

小熊今天有意外收获,忍不住给大家分享我愉快的心情!昨天中午下楼取外卖的时候被一个同事认出来了,他问我:“是不是【编程三分钟】的作者,文章写的不错”。你知道吗!我当时就是一愣,然后差点感动到哭出来,虽然小熊的号比不上大牛的号,不能随便发一篇文章都有成千上万的阅读量;但是非常开心的是,我还有你们,默默的关注我,爱你们~!今天想和大家聊聊 golang 的异常处理异常处理思想在 go 语言里是没有 try catch 的概念的,因为 try catch 会消耗更多资源,而且不管从 try 里面哪个地方...阅读全文

51CTO博客 2021-01-27 11:48:50 mb5ff40ceab21c4