Golang三种方式实现超时退出

问题 前段时间发现线上有个服务接口,总是间歇性告警,有时候一天两三次,有时候一天都没有。 告警的逻辑是在一个接口中异步调用了另一个HTTP接口,这个HTTP接口调用出现超时。但是我去问了负责这个HTTP接口的同学,人家说他们的接口相应都是毫秒级别,还截图监控了,有图有真相,我还能说啥。 但是,超时是确实存在的,只是请求还可能没有到人家服务那边。 这种偶发性问题不好复现,偶尔来个告警也挺烦的,第一反应还是先解决问题,思路也简单,失败后重试。 解决方法 且不谈重试策略,先说说什么时候触发重试。 我们...阅读全文

简书 2020-03-22 22:32:45 Jackie_Zheng

leetcode_945

Golang: 思路:先做一次排序,然后看每一个值,如果等于上一个值,那么该元素需要自增,如果小于上一个值,那么该元素需要调整为上一个元素自增一的值 代码如下: func minIncrementForUnique(A []int) int { res:=0 sort.Ints(A) if len(A)<=1{ return res } for i:=1;i<len(A);i++{ if A[i]==A[i-1]{ A[i]++ res++ }else{ if A[i]<A[i-1]{ res+...阅读全文

简书 2020-03-22 22:32:45 淳属虚构

关于收集,标准化和集中化处理Golang日志的一些建议

依赖分布式系统的公司组织和团队经常使用Go语言编写其应用程序,以利用Go语言诸如通道和goroutine之类的并发功能。如果你负责研发或运维Go应用程序,则考虑周全的日志记录策略可以帮助你了解用户行为,定位错误并监控应用程序的性能。 这篇文章将展开聊一些用于管理Go日志的工具和技术。我们将首先考虑要使用哪种日志记录包来满足各种记录要求。然后会介绍一些使日志更易于搜索和可靠,减少日志资源占用以及使日志消息标准化的技术。 日志包的选择 Go标准库的日志库非常简单,仅仅提供了print,panic和f...阅读全文

Segmentfault 2020-03-27 09:32:36 Kevin

面试:删除链表的节点

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2: 输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4...阅读全文

Segmentfault 2020-03-26 23:32:33 若鱼治水

HTTP协议杂谈一

HTTP协议中方法的变更: 0.9版本的http协议中只有GET方法 1.0增加了HEAD和POST方法 1.1 增加了PUT,DELETE等方法 协议作者最初定义这些方法时是期望这些方法的请求的操作与方法名称相符。比如GET方法,应该就是个只读的请求。在遵循http协议方法定义的初衷方面,最出名的莫过于有名的REST api设计。 但是,现在很多很多公司都没有继续遵循这一点,甚至有些公司的http接口的实现基本都是采用POST方法,只有静态资源才是采用GET方法。另外由于一些公司用http服务...阅读全文

简书 2020-03-22 17:32:43 golang推广大使

Go语言:select 语句块

Golang 的select语句块使 goroutine 等待多个通信操作。 select会进行阻塞,直到其中一种情况可以运行,然后再执行该情况。如果好多个情况都可以执行,它将​​随机选择一个。 如果没有其他情况可用,则会运行选择中的default默认情况。 select { case i := <-c: // use i default: // receiving from c would block } default情况下在 channels 中尝试发送或接收而不会阻塞。 例子: pack...阅读全文

简书 2020-03-22 17:32:43 落落大方的发卡

go学习记录--如何运行

go学习记录--如何运行 个人一直觉得语法的学习不存在多大问题,咱们真正要了解的是程序如何运行。对于go语言的编译到运行其实还是一个比较有意思的过程,比如go的代码写完到底层的汇编代码是一个怎样的结构,通过了解底层的结构,我们应该如何去深入的学习go。 导读 go程序编译执行 再看汇编码 思考总结 go程序编译执行 咱们先简单运行一个go的代码例子,看下要满足什么条件go才能编译执行 代码示例 go的文档肯定会告诉你,打包运行一个程序需要在main包下有一个main方法才行。写了下面一段简单代码...阅读全文

Segmentfault 2020-03-26 10:32:41 A1len

Go 每日一库之 buntdb

简介 buntdb是一个完全用 Go 语言编写的内存键值数据库。它支持 ACID、并发读、自定义索引和空间信息数据。buntdb只用一个源码文件就实现了这些功能,对于想要学习数据库底层知识的童鞋更是不容错过。 感谢@kiyonlin推荐! 快速使用 先安装: $ go get github.com/tidwall/buntdb 后使用: package main import ( "fmt" "log" "github.com/tidwall/buntdb" ) func main() { db...阅读全文

Segmentfault 2020-03-26 07:32:33 darjun

Go项目简单接入travis ci

上一篇文章提到了npm的接入 travis 实现自动发布 npm 包的方法,本文主要讲述 Go 项目的使用,主要分为执行单元测试和 build 打包发步到 github release。具体 travis 的基本操作参考上文即可,本文只讲述不同的部分 单元测试 本文不讲述 Go 的单元测试如何编写,这里直接以filenamify(一个合法化文件路径的库)为例子。已为filenamify.go编写测试文件filenamify_test.go。只需要在tracis中执行go test -v即可。 #...阅读全文

掘金 2020年03月21日 flytam

使用go/scanner库来查找golang标准库源码中最常用的标识符

在YouTube上又看了Francesc Campoy大神的视频。这一期他主要讲了go/scanner库的用法。那么什么是go/scanner呢? 官方的定义是: Package scanner implements a scanner for Go source text. It takes a []byte as source which can then be tokenized through repeated calls to the Scan method. 翻译过来就是: scan...阅读全文

Segmentfault 2020-03-25 15:32:33 zooeymoon

Unicode 颜文字(emoji)格式和 Go 代码处理

前几天时间测试同学在我们的前端输入了颜文字,之后软件就出 bug 了。借修 bug 机会我花了点时间学习了一下 Unicode 颜文字(emoji)的一些知识。本文记录我对 emoji 的一些认识,并且简单介绍一下我为此而做的一个 Go 语言颜文字提取库的用法。 Unicode 背景简介 我们大家都知道,为了标准化全世界所有文字的编码,诞生了 unicode。最早 unicode 的设计者们采用的是一个字(2 Bytes)来表示 unicode 值(UCS-2),以为总共 65536 个值就可以...阅读全文

Segmentfault 2020-03-25 22:32:35 amc

gin开发

https://chinaevent.microsoft.com/events Micro architecture & design patterns for microservices https://micro.mu/blog/2016/04/18/micro-architecture.html Introducing Micro - a microservice ecosystem https://micro.mu/blog/2016/03/17/introduction.html ht...阅读全文

简书 2020-03-22 06:32:42 王艳秋1

Goland辅助工具goimports和gomodules

1、goimports工具goimports工具是Go官方提供的一种工具,它能够为我们自动格式化 Go 语言代码并对所有引入的包进行管理,包括自动增删依赖的包引用、将依赖包按字母序排序并分类。我们在使用Goland IDE的时候,建议使用goimports工具。它具备包依赖管理+gofmt的功能。具体配置如下: 图1 选择Setting-&amp;amp;gt;Tools-&amp;amp;gt;File Watchers 图2 添加goimports工具2、gomodules工具Go 1.11...阅读全文

简书 2020-03-22 04:32:45 Sunny翰翰

golang 利用函数内匿名函数实现自己的递归

在做树的递归遍历按层遍历的代码的时候遇到一个问题就是这样 var ff = func (int) { ff() } 上面的代码编译不过去。 查找资料是这么讲的: We've written >100k lines of Go code and it has come up maybe once. That kind of frequency doesn't suggest that a language change is warranted. 意思就是说,在实际编码中遇到需要这种特性的几率很小...阅读全文

简书 2020-03-22 04:32:44 世界之树weight

Dockerfile指令详解

Dockerfile指令详解 FROM指定基础镜像 定制镜像一定是以一个镜像为基础的,FROM就是指定基础镜像的指令,它是必备的第一条指令。 基础镜像可以是 服务类镜像:nginx、redis、mongo、mysql、httpd、tomcat等 也可以是语言运行环境镜像:node、openjdk、python、ruby、golang等 还可以是更基础操作系统镜像:ubuntu、debian、centos、fedora、alpine等 还可以是scratch,表示空白镜像 RUN执行命令 RUN是...阅读全文

leetcode_1249

Golang: 思路:栈匹配即可 代码如下: func minRemoveToMakeValid(s string) string { var stack []int bytes:=[]byte(s) i:=0 for i<len(bytes){ if bytes[i]=='('{ stack=append(stack,i) } if bytes[i]==')'{ if len(stack)==0{ bytes=append(bytes[0:i],bytes[i+1:]...) i-- }els...阅读全文

简书 2020-03-22 04:32:44 淳属虚构

微服务架构的多种部署模式

微服务架构的多种部署模式 声明:本文主要内容来自《微服务架构设计模式》 部署包含两个互相关联的概念:流程和架构。部署流程包括一些由开发人员和运维人员执行的过程,以便将软件发布到生产环境。部署架构定义了该软件运行的环境结构。 以微服务架构开发的程序,经常涉及到多个服务组成,后端的网关模块,用户模块,日志模块,业务模块等,还有前端Node.js模块。以笔者所在公司为例,每次部署服务时都要互相之间沟通协调好,方便服务之间的调用。一般在开发环境中多以jar形式部署,从本地直接打包发布到服务器,方便快捷,...阅读全文

简书 2020-03-22 04:32:44 魏春雨

链表(Linked List)

什么是链表? 通过指针或者引用将一系列数据节点串起来的数据结构称为链表,链表数据结构与数组最明显的区别就是它在内存中并不是连续的,链表是通过在每个数据节点中设置下一个节点的指针Next将下一个节点串起来 为什么会有链表? 每一个编程语言中都会有数组的数据结构,可以直接通过索引下标来访问数组中的数据,所以对于数组来说访问一个值的时间复杂度为O(1)。但是如果要在数组中插入一个值时会有哪些情况呢 1、需要在数组的头插入 对于这种情况需要将数组中所有的元素往后挪动一步,然后再将待插入的数据插入第一个空...阅读全文