一个非侵入的Go事务管理库——如何使用

在文章"清晰架构(Clean Architecture)的Go微服务: 事物管理"中,我谈到了如何在清晰架构中实现非侵入的事务管理。 它允许你把事务代码与业务逻辑代码分开,并且让你在编写业务逻辑时不必考虑事务。但它也有一些缺点。首先,它是整个清晰框架(Clean Architecture)的一部分,所以你不能抛开框架单独使用它。其次,尽管它对业务逻辑没有侵入,但它对框架有侵入。你需要修改框架的各个层,使其工作,这使他看起来比较复杂。 第三,正如我在文章中提到的,它存在一个依赖泄漏的漏洞。我虽然在...阅读全文

Segmentfault 2020-06-28 09:32:35 倚天码农

Open-Falcon告警如何实现自定义多功能告警

Open-Falcon 是小米运维部开源的一款互联网企业级监控系统解决方案。其中有着如下的特点:①强大灵活的数据采集:自动发现,支持falcon-agent、snmp、支持用户主动push、用户自定义插件支持、opentsdb data model like(timestamp、endpoint、metric、key-value tags)②水平扩展能力:支持每个周期上亿次的数据采集、告警判定、历史数据存储和查询③高效率的告警策略管理:高效的portal、支持策略模板、模板继承和覆盖、多种告警方...阅读全文

简书 2020-06-21 16:32:47 lambda2019

golang面试题:对未初始化的的chan进行读写,会怎么样?为什么?

image 问题 对未初始化的的chan进行读写,会怎么样?为什么? 怎么答 读写未初始化的chan都会阻塞。 举例 1.写未初始化的chan package main // 写未初始化的chan func main() { var c chan int c <- 1 } // 输出结果 fatal error: all goroutines are asleep - deadlock! goroutine 1 [chan send (nil chan)]: main.main() /Users...阅读全文

简书 2020-06-21 14:32:56 9號

04GORM源码解读

简介 查询 查询流程 构建查询 SQL 语句 条件语句 小结 search 结构体 search 的定义 search 的方法 小结 总结 简介 GORM 源码解读, 基于 v1.9.11 版本. 查询 上一节中, 我们已经探究过了模型是如何定义的, 以及数据表是如何创建的.这次, 看一下查询是如何实现的. 查询涉及到很大的一块内容, 因为要支持各种类型的方法.先看一下官方文档中提供的最简单的几个查询方法. // 根据主键查询第一条记录 db.First(&user) //// SELECT *...阅读全文

Segmentfault 2020-06-28 09:32:35 帅气猫咪

通过汇编看golang函数的多返回值

golang这门语言,有个比较好的特性,就是支持函数的多返回值。想C,C++,Java等这些语言,是不支持函数多返回的。但是C,C++可以使用传递指针,实现函数多返回。但是,你有没有想过,golang是怎样实现函数多返回值的呢? 我们知道,C,C++是通过寄存器实现函数返回值的,也就是先把返回值写入到一个寄存器中,然后再从寄存器中,读到函数的返回值。golang也是这样实现的吗? 伟大的思想家孔子曾说过,在源码面前一切都如同裸奔。后来,鲁迅先生,总结了孔子的思想,说出了,在汇编面前,一切语法都是...阅读全文

简书 2020-06-21 12:32:49 紫葡萄0

Gox语言中进行屏幕截图并显示在Sciter图形界面中-GX38.2

本例承接GX38.1一文中的例子,加了一些改进,在进行界面截图后,将图片展示在用Sciter包编写的图形界面上。 代码如下: // 设置github.com/kbinani/screenshot包的简称 screenshot = github_kbinani_screenshot // 获取第一个显示器的屏幕尺寸区域 bounds := screenshot.GetDisplayBounds(0) // 截取该屏幕截图 // 注意 := 和 = 作为赋值用,在Gox语言中是等价的 img, _ ...阅读全文

简书 2020-06-21 12:32:48 陆满庭

AC自动机实现

1.简介 在工程实践中,AC自动机是一种常见的解决字符串匹配的处理方式,最常见的应用场景就是广告投放中的敏感词过滤;AC自动机的实现会涉及到BFS宽度优先搜索和trie树两个概念,关于这块内容本节不再细述,不甚了解的同学可以网上搜下资料,本部分只讲下AC自动机的实现衍变。 AC自动机是在trie树基础上发展起来的,解决trie树只能处理前缀匹配的问题,对于AC自动机的应用场景而言,trie树存在的问题是在字符匹配失败时,不能进行跳转、继续匹配,为此,AC自动机引入了fail指针概念,用于匹配...阅读全文

Go语言中文网 2020-06-21 11:54:24 tianqy

sync pool中的几个问题解答

之前在分享中,发现了自己在看sync.pool的源码中忽略了两个个重要的问题。这两个问题,确实是在看源码的过程中自己没思考的。确实,这也是分享的好处,分享让自己能从不同角度重新看待原来的问题。废话不过说,下面上课。 nocopy的作用,没有nocopy又会出现什么问题 首先介绍下golang的nocopy 这个nocopy只是在结构体里面声明的一个变量,声明这个变量并不是不能拷贝,只是在兽医go vet的检查下会报错。 noCopy 是 go1.7 开始引入的一个静态检查机制。它不仅仅工作在运行...阅读全文

简书 2020-06-21 10:32:44 7赢月

golang调用外部命令,并且通过stdin传数据

golang调用外部命令,并且通过stdin传数据的例子 使用场景: 当我们需要调用一个外部命令,然后给外部命令传参数,常用方便的做法是通过命令行传参数,但是有些时候数据太长,或者基于安全考虑,比如传密码,等不方便使用参数时,我们可以通过stdin传递。 下面一个docker login传递密码的例子: func dockerLogin(registry string, username string, token string) error { cmdarray := []string{"-c...阅读全文

简书 2020-06-21 06:32:42 CodingCode

golang的值类型和引用类型

队列:先进先出 栈:先进后出,在程序调用的时候从栈空间去分配 堆:在程序调用的时候从系统的内存区分配 1)值类型:基本数据类型int, float,bool, string以及数组和struct 值类型:变量直接存储值,内容通常在栈中分配 var i = 5 i -----> 5 2)引用类型:指针,slice,map,chan等都是引用类型 引用类型:变量存储的是一个地址,这个地址存储最终的值,内容通常在堆上分配,通过GC回收 ref r ------> 内存地址 -----> 值 3)实例 ...阅读全文

ARTS Tips: Golang的开发环境

最近在学习golang,遇到IDE的选择问题,其实选项只有三个:GoLand: A Clever IDE to Go by JetBrains 、 Visual Studio Code Go IDE 和其它工具,这里其它工具包括各种编辑器golang插件或者通用IDE工具的扩展。本篇主要关注Visual Studio Code Go IDE ,这是一个免费且设计精良的工具,值得尝试。 安装 Visual Studio Code Go IDE 看数据有3百多万下载,看来深受大家喜爱。安装也比较简单...阅读全文

掘金 2020年06月20日 学习者老六

中高级开发,面试不会点儿 Docker 真的不行

注:近年来,Docker越来越火,毫无疑问的会成为未来的趋势。同样的越来越多的公司重视Docker,不学习Docker,出去都不敢说自己热爱技术~。我司招人的话,对于中级以上,基本的Docker是必须要了解的,否则基本不怎么考虑。对于初级,更侧重基础和编码的能力,但是会点儿Docker绝对是加分项。废话不多说,下面这篇是一个入门,熟悉Docker的好文章,学起来吧!一、简介1、了解Docker的前生LXCLXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而...阅读全文

简书 2020-06-20 21:32:51 Java斗帝之路

golang之channel用法

转自 Go Channel 高级实践 用法 超时控制 取最快的结果 限制最大并发数 for...range 优先 多个 goroutine 同步响应 非阻塞的 select for{select{}} 终止 1.超时控制 // 利用 time.After 实现 func main() { done := do() select { case <-done: // logic case <-time.After(3 * time.Second): // timeout } } func do() ...阅读全文

简书 2020-06-20 21:32:45 10xjzheng

RabbitMQ入门6-死信和备份交换机

1. 死信交换机 (Dead-Letter-Exchange) 当消息在一个队列中由于过期,被拒绝等原因变成死信(dead message)之后,它能被重新发送到一个交换机中这个交换机就是死信交换机,绑定死信交换机的队列就称之为死信叫交换机 2. 判断一个消息是否是死信消息的依据: 消息被拒绝 (msg.Reject) 并且设置requeue值设置为false 消息过期后,消息过期时间设置主要有两种方式 设置队列的过期时间,这样改队列所有的消息都存在相同的过期时间 在队列申明的时候使用 x-me...阅读全文

Segmentfault 2020-06-28 09:32:34 李昊天

RabbitMQ入门5-消息确认模式和幂等性

1.消息确认模式 在RabbitMQ中,消息确认主要有生产者发生确认和消费者接收确认 1.1生产者发送确认 生产者发送消息到RabbitMQ服务器,如果RabbitMQ服务器收到消息,则会给生产者一个应答,用于告诉生产者该消息已经成功到达RabbitMQ服务器中 1.2消费者接收确认 用于确认消费者是否成功消费了该条消息消息确认实现方式有两种 通过事务的方式 confirm确认机制,因为事务模式比较消耗性能,在实际工作中用的也不多 2.生产者发送确认 2.1 开启confirm模式 当Chann...阅读全文

Segmentfault 2020-06-27 14:32:33 李昊天