17.Golang设计模式之迭代器模式
迭代器模式 GitHub代码链接 迭代器模式(Iterator Pattern)是JAVA和.NET中常用的模式,这种模式用于顺序访问集合中的元素。 什么是迭代器模式 迭代器提供一种方法顺序访问一个对象各个元素,而无需暴露对象的内部表示。 迭代器模式解决了什么问题 不同的方式遍历整个集合,把在元素之间游走的责任交给迭代器,而不是集合对象。 优点 它支持不同的方式遍历集合对象 迭代器简化了聚合类 在同一个聚合上面可以有多个遍历 迭代器模式中,新增聚合类和迭代器都很方便,无需新增代码 缺点 迭代器模...阅读全文
【golang小工具】获取目录下文件路径信息写入Excel并打包上传远程服务器
@TOC ToolTest 整体说明 最近在练习go代码,恰好工作中有一些场景需要经常去访问某个目录下所有文件,将相对路径写入Excel并上传系统,同时打包文件上传服务器。利用工作之余,练练手学习写了一个小工具,主要实现功能如下: 获取指定目录下所有文件路径信息 将获取文件相对路径信息保存至Excel文件中 将对应目录下所有文件打入tar包 将war包上传至指定的服务器路径 完整代码下载链接 代码实现 infoFromYaml.go 读取 yaml 配置文件信息,并保存在结构体变量中 导入包 i...阅读全文
PHP 和 Go 实现环路链表检测
原文链接:何晓东 博客环路链表检测给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。来源:力扣(LeetCode)链接:https://leetcode-cn.com/probl...解题思路 1遍历链表,同时将每次的结果放到 map 中,如果有元素重复出现,则是有环形链表代码/** * Definition for singly-linked list. * type ListNode ...阅读全文
2020-09-23
1、进程和线程的区别 答:计算机由CPU和操作系统组成,CPU执行计算任务,操作系统执行资源调度任务。在操作系统上会有很多软件可以执行,每个软件的执行系统都会单独分配资源,即一个独立的进程,进程和进程之间是相互独立的,每个进程有单独的分配内存空间,进程是系统进行资源分配和调度的一个独立单位。每个进程都至少有一个线程,线程执行代码程序,共享进程的数据资源,线程是轻量级的,有自己的堆栈、寄存器,共享进程空间,一个进程可以有多个线程,并发执行由CPU控制时间段,做上下文切换,上下文切换由调度器控制,在...阅读全文
GoMod 文档翻译
GO MOD Go Mod : Golang 的包管理工具之一 中国代理 添加代理源 https://goproxy.cn Go Mod 常用指令集 官方WIKI说明 链接:Go-Mod_Github/wiki Go Mod 的使用 在使用Go Mod之前,需要将环境变量GO111MODULE设置为auto或者on,如果没有设置,将会默认开启。 也可以在运行Go指令之前,显示声明环境变量GO111MODULE=on GO111MODULE 应该是 go mod 的1.11版本 项目初始化 $ g...阅读全文
不同语言对单例模式的不同实现
前言前段时间在用 Python 实现业务的时候发现一个坑,准确的来说是对于 Python 门外汉容易踩的坑;大概代码如下:class Mom(object): name = '' sons = [] if __name__ == '__main__': m1 = Mom() m1.name = 'm1' m1.sons.append(['s1', 's2']) print '{} sons={}'.format(m1.name, m1.sons) m2 = Mom() m2.name = 'm2...阅读全文
[开源阅读]snowflake-Go
github地址:https://github.com/bwmarrin/snowflake 总共就300行代码,主要逻辑也就100行吧。 这是一款大数据量下的id生成器的snowflake-golang实现,snowflake生成的id (int64类型)包含毫秒时间戳、机器id、同一毫秒下的自增id这3部分数据,这里面主要是位运算的妙用(好多开源项目都会用到位运算) 用int64的64bit存储以下部分: 12bit的自增id step(同一毫秒下) 10bit的机器id node(多台机器...阅读全文
GO语言实现 一 快速排序(一)
快速排序被誉为20世纪科学和工程领域的十大算法之一。听名字就能了解,快速排序的特点,就是快 快速排序 快速排序采用了二分递归的思想,通过一趟排序将整个数组划分为两个部分,低位部分的值全部小于高位部分的值,然后对低位和高位部分分别排序 快速排序算法的具体步骤如下: 对数组 arr 进行随机洗牌 划分数组,我们通过交换操作,找到合适的 j,保证 j 左边的元素全部小于 arr[j] j 右边的元素全部大于 arr[j] 对每一块被划分的切片进行排序 qs1.png 我们可以通过双指针在O(n)的时间...阅读全文
golang Error Wrapping
go1.13中引入err wraping机制 1.13前函数返回一个error errors.New()创建一个errorString errorString 只包含了一个字符串 实现了error接口的Error方法 当函数嵌套返回时 嵌套层数更深的error只保留了字符串信息 丢失了原始的类型 // Each call to New returns a distinct error value even if the text is identical. func New(text strin...阅读全文
golang实现简单的流式处理
实现一个最简单的类似spark的流式处理流程 包含map和filter 数据 type Stream struct { data []int } map函数 func (s Stream) Map(f func(int) int) Stream { res := make([]int, 0, len(s.data)) for _, item := range s.data { res = append(res, f(item)) } return Stream{res} } fliter函数 f...阅读全文
gin框架sentinel流量控制初体验
image.png 流量控制设计理念 流量控制有以下几个角度: 资源和资源之间的关系; 运行指标,例如 QPS、线程池、系统负载等; 控制的效果,例如直接限流、冷启动、匀速+排队等待等。 Sentinel提供了几个组件让用户去实现相关的流控方案: 基于QPS的流量控制:流量控制 基于协程数的隔离流控:并发隔离控制 基于热点参数的流量控制:热点参数限流 基于系统指标的自适应流控:系统自适应流控 Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。 https:...阅读全文
想要4个9?本文告诉你监控告警如何做
“你说说,没有仪表盘的车,你敢开吗?”“没有仪表盘的车开在路上,你怎么知道现在是什么情况?”“客户说你这车又崩了,咋知道什么时候好的?啥时候出的问题?”前言将思考转换到现实的软件系统中,可想而知没有监控系统的情况下,也就是没有 ”仪表盘“ 的情况下实在是太可怕了。你的故障永远都是你的客户告诉你的,而...在什么时候发生的,你也无法确定,只能通过客户的反馈倒推时间节点,最后从错误日志中得到相对完整的日志信息。问题更要命的是你无法掌握主动权,错误日志有可能会有人漏记录,平均修复时间(MTTR)更不...阅读全文
一文搞定macOS下Go语言开发环境的搭建
1.下载安装 Go语言 下载地址:https://golang.google.cn/dl/ image.png 下载完成后,直接双击 文件进行安装 image.png 一路点击next即可 image.png 最后在终端执行 go version 命令,如过能获取到版本信息则说明安装成功了 2.配置环境变量 在终端输入go env会打印出go 相关的所有环境变量。 这些环境变量,仅设置下面这两个就足够了 一个是GO111MODULE 设置为 on,表示使用 go modules 模式 $ go ...阅读全文
Golang标准库——errors
errors包实现了创建错误值的函数。 func New func New(text string) error 使用字符串创建一个错误,请类比fmt包的Errorf方法,差不多可以认为是New(fmt.Sprintf(...))。 func main() { err := errors.New("emit macho dwarf: elf header corrupted") if err != nil { fmt.Print(err) } } func main() { const name...阅读全文
Golang标准库——expvar
expvar包提供了公共变量的标准接口,如服务的操作计数器。本包通过HTTP在/debug/vars位置以JSON格式导出了这些变量。 对这些公共变量的读写操作都是原子级的。 为了增加HTTP处理器,本包注册了如下变量: cmdline os.Args memstats runtime.Memstats 有时候本包被导入只是为了获得本包注册HTTP处理器和上述变量的副作用。此时可以如下方式导入本包: import _ "expvar" type Var type Var interface { ...阅读全文