Golang设计模式之过滤器模式

过滤器模式 GitHub代码链接 什么是过滤器模式 这种模式运行开发人员使用不同的标准来过滤一组对象。 解决了什么问题 通过逻辑运算,以解耦的方式把每个过滤器连接起来。 优点 可以自由组合不同的过滤条件. 缺点 代码实现 有一群人,我们想筛选出男性,女性,单身,已婚这样一种类型的人。使用过滤器模式,我们将每种筛选的条件都实现成一个过滤器。这样,我们可以很容易的通过组合这些过滤器,筛选出已婚男性,单身女性等这样的组合条件。 1. 实现人的模板类 //Person 人的模板 type Person ...阅读全文

简书 2020-09-30 16:32:48 ShawnLee_123

无序的多个范围段,有交集的合并,最后产出有序的无交集的范围段

无序的多个范围段,有交集的合并,最后产出有序的无交集的范围段。 如[[24, 41], [58, 75], [79, 89], [62, 80], [5, 10], [20, 30]] 结果就是:[[5, 10], [20, 41],[58, 89]] $arr = [[24, 41], [58, 75], [79, 89], [62, 80], [5, 10], [20, 30]]; mergeSortArr($arr); function mergeSo...阅读全文

Go语言中文网 2020-09-30 15:02:46 lobo

go分库分表 主从分离例子

# go分库分表 主从分离例子 网上有很多介绍分库分表的文章,方法很多: ``` 分区表切分 垂直切分 水平切分 区间切分 取模切分 ``` 这里不细说 分库分表简单,但后期会带来一系列的难题: ``` 事务 Join 分页 ``` **数据库:** <img src="db.png" /> ``` master和slave是一个主从架构 imagespider_db:[ImageSpider](https://github.com/bc...阅读全文

Go语言中文网 2020-09-30 15:02:33 bccber

Base64 编码原理和实现

背景一般涉及到数据传输, 考虑到业务方直接通过字符串传过来时会被过滤特殊字符等情况,对数据的编码必不可少。数据编码方式最常用的应该是 Base64。 Base64 编码本质上是一种将二进制数据转换成文本数据的方案。 下面会详细介绍它的原理,实现以及一些应用场景。<!--more-->编码原理Base64 编码是基于64个字符 A-Z,a-z,0-9,+,/ 的编码方式,因为2的6次方正好为64,所以就用6bit就可以表示出64个字符,比如 000000对应A,000001对应B。流程按字符串长度...阅读全文

Segmentfault 2020-10-04 14:32:32 lryong

go test 禁用测试缓存

背景项目开发在做单元测试, 发现跑测试 cases 的时候,每一个跑完,日志后都带有一个 (cached) 的标志。尽管代码的实现已经做了修改(比如返回不同数据), 但是发现再次执行 go test -v case_test.go ,返回跟上一次的结果居然一致,实际上这样的测试是没多少意义的。 之前没有了解过 go test 的原理, 这里想看下了内部是怎么 run 的,以及要怎样禁用测试缓存。<!--more-->问题分析Go 官方文档详细说明了 test 包的工作原理:在执行 go test...阅读全文

Segmentfault 2020-10-03 16:32:32 lryong

Go 版本的升降级

背景在 MAC 上把 Go 版本升级到1.13后, 在终端上执行 go 命令表现得比较奇怪,很不习惯, 想回滚到之前稳定版本。解决Go 版本的升降级算是一件也比较麻烦的事情了,1.12版本之前,安装完 Go 之后, 需要配置 GOROOT 和 GOPATH 等, 跟之前一堆 Go 管理工具像 glide 和 vendor 有得一拼(还好现在官方 go modules 逐渐将包管理入口也做了收敛)。这里收集和整理了 Go 版本升降级的两个方法。方法一安装想要的 Go 版本, 并做链接检查当前 Go...阅读全文

Segmentfault 2020-10-03 11:32:35 lryong

map的自动扩容与手动缩容

### map的自动扩容与手动缩容 首先还是提出问题:*扩容和缩容有什么用?为什么需要扩容和缩容?* 在想解答这个问题之前,首先还是需要了解一下go语言中的map go语言中的map与Java中的map实现还是有些不同,go的map底层实现方式是hash表(哈希桶+数组),Java中,JDK1.6,JDK1.7里HashMap采用位桶+链表实现,JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树。 先看map的数据结构吧:...阅读全文

Go语言中文网 2020-09-29 22:09:23 TonoT

Golang标准库——encoding(2)

binary binary包实现了简单的数字与字节序列的转换以及变长值的编解码。 数字翻译为定长值来读写,一个定长值,要么是固定长度的数字类型(int8, uint8, int16, float32, complex64, ...)或者只包含定长值的结构体或者数组。 变长值是使用一到多个字节编码整数的方法,绝对值较小的数字会占用较少的字节数。详情请参见:http://code.google.com/apis/protocolbuffers/docs/encoding.html。 本包相对于效率更...阅读全文

简书 2020-09-29 21:32:58 DevilRoshan

OPENWRT编译之树莓派4B

---title: OPENWRT编译之树莓派4Bdate: 2019-11-24categories: Linuxtags: rpi---# 环境配置说明- 适用硬件:Raspberry Pi 4B- 编译系统:Debian For WSL- 参考借鉴:[参数配置](https://mlapp.cn/374.html) | [LuCI配置](https://www.right.com.cn/forum/thread-344825-1-1.html) | [网卡设置](https://www.r...阅读全文

简书 2020-09-29 21:32:58 leven98

GOLINT代码规范检测

一. Golint介绍 Golint 是一个源码检测工具用于检测代码规范Golint 不同于gofmt用于代码格式化Golint会对代码做以下几个方面检查package注释 必须按照 “Package xxx 开头”package命名 不能有大写字母、下划线等特殊字符struct、interface等注释 必须按照指定格式开头struct、interface等命名变量注释、命名函数注释、命名各种语法规范校验等 二. Golint安装 mkdir -p $GOPATH/src/golang.org...阅读全文

简书 2020-09-29 21:32:58 就是耍帅

GoImports安装使用(修正 go import包的规范)

1. GoImports介绍Go开发过程中时候总需要手工引入包和删除没有使用的包,此时有人意识到可以改善下,想Java、C#、Python等等,总能自动的帮你处理下包。现在Go官方提供了 GoImports 工具当import多个包时,应该对包进行分组。同一组的包之间不需要有空行,不同组之间的包需要一个空行。标准库的包应该放在第一组。goimports这个工具能直接帮你修正import包的规范2. GoImports安装mkdir -p $GOPATH/src/golang.org/x/cd $...阅读全文

简书 2020-09-29 21:32:43 就是耍帅

linux下安装grpc插件 (c++和go语言)

在debian/ubuntu系统下,需要做如下准备操作:$ [sudo] apt-getinstallbuild-essential autoconf libtoolpkg-config如果你想要从源码编译并且运行测试,同时运行下面的安装:$ [sudo] apt-getinstalllibgflags-dev libgtest-dev$ [sudo] apt-getinstallclang libc++-dev下拉源代码信息(包括子模块)在编译之前,你需要下拉grpc的github仓库,并且下...阅读全文

简书 2020-09-29 21:32:42 八英里1022

go 杂谈一

目录 1.go 各种代码运行 2.go 在线编辑代码运行 3.通过 Gob 包序列化二进制数据 4.使用 encoding/csv 包读写 CSV 文件 5.实现 HTTP 断点续传多线程下载 5.1. HTTP断点续传多线程下载 5.2. Range & Content-Range 5.3. Golang代码实现HTTP断点续传多线程下载 6.logrus 日志使用教程 6.1 基本用法 6.2 简单定义格式 6.3 输入json格式和设置行号 6.4 自定义Logger 6.5 Hook 接...阅读全文

简书 2020-09-29 21:32:41 杨言锡

Golang设计模式之桥接模式

桥接模式 GitHub代码链接 Bridge Pattern用于把抽象是实现分离。使得二者可以独立变化。 什么是桥接模式 这种模式涉及到一个作为桥的接口,使得实体类的功能独立于接口实现类。 解决了什么问题 在多种可能会变化的情况下,用继承会造成类爆炸,扩展起来不灵活。我们把多角度的类分离出来, 让他们独立变化,减少它们之间的耦合。 优点 1.在多种可能变化的情况下,使用继承可能造成类特别多。桥接可以解决这个问题。 2.优秀的拓展能力 缺点 1.桥接模式会增加系统的理解和设计难度 代码实现 我们使...阅读全文

简书 2020-09-29 21:32:41 ShawnLee_123

吴恩达-机器学习课程的相关资料

吴恩达-机器学习课程的相关资料现已整理并上传至Github和Gitee。资料内容包括:我的手写笔记(包含md、PDF两种格式),课后编程习题的PDF文档、我整理的译文、习题代码、我的习题答案,Matlab r2019a下载、安装、破解、使用教程、Matlab相关命令、操作的学习笔记。其中编程作业的答案均以满分成绩通过。Github下载地址:https://github.com/Pyvago/machine-learning.gitGitee下载地址:https://gitee.com/ming0...阅读全文

Go语言中文网 2020-09-29 19:16:57 Pyvago

隧道转发爬虫代理的使用

网络爬虫,是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。一般人能访问到的网页,爬虫也都能抓取。爬虫抓取,就是模拟真实用户浏览网页采集数据。爬虫是可以按照一定的规则,自动的采集信息。正常的用户访问网站浏览时间较长,访问也不会太过于频繁,目标网站服务器会限制爬虫行为,这是就需要降低访问评率或者停止访问或者用http代理去配合爬虫访问HTTP代理分很多类型,至于选择哪种类型的代理IP最适合爬虫,看个人业务的需求,需求大的业务,对IP池要求大的可以选择一些高质量的隧道转发的爬虫代理加强版。HT...阅读全文

Go语言中文网 2020-09-29 17:15:38 laical

Golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf

# 定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} 普通占位符号 占位符 说明 举例 输出 %v 相应值的默认格式。 Printf("%v", people) {zhangsan}, %+v 打印结构体时,会添加字段名 Printf("%+v", people) {Name:zhangsan} %#v 相应值的Go语法表示 Printf("#v", people) main.Human...阅读全文

51CTO博客 2020-09-28 11:05:32 redcock

四年JAVA转Go

2020年终究是不平凡的一年,而就是在这新冠疫情刚刚差不多结束的一年里,结束了我已经用了四年 的JAVA语言,转向了Go开发的大军。 首先说一下我为什么要转Go吧,主要也是因为换了份新工作,新公司用的开发语言是Go,并且的话 也特别想多学习一门新的语言,毕竟java现在用的人也越来越多了,感觉招聘的要求也越来越高,多掌 握一门新的语言,感觉对自己程序员的生涯也不是件坏事。新入职的这家新公司,感觉还是挺人性化的 ,因为之前没有过Go开发的经验,所以团队也一直鼓励和支持我去从头学习Go语言,现在已经...阅读全文

51CTO博客 2020-09-28 22:43:50 龙爱海