Drone对私有镜像仓库的支持方式,以及源码改造优化

Drone介绍 Drone是新一代的CI/CD工具,基于pipeline+docker模式,可以非常灵活的支撑很多业务场景,目前,Done最新为0.8.6版本,在github上,已经斩获15K高星star。 Drone和gitlab结合,可以在项目中设置 .drone.yml 文件来定制你需要执行的各种各样的流程,比如,代码拉取、镜像构建推送、PHP composer 包管理、Golang构建、消息通知、自动部署、自动化测试等等。插件化的支持,以及插件的开发和使用模式,使得Drone的扩展性非常...阅读全文

2018.08.16 01:00* 阿董lyre
阅读:1203 评论:0

Go 语言的 Modules 系统介绍

即将发布的 Go 语言 1.11 版本将会给我们带来对 *modules*(模块)的实验性支持,这是 Go 语言新的一套依赖管理系统。 (译注:很多编程语言中,把 modules 译作「模块」,但由于目前该机制在 Go 语言还没正式发布,因此尚未有非常普及的译法。而类似的 vendor 一词的翻译,大多中文文章都是采取保留英文原文的方式处理,因此本文对 modules 的翻译参考 vendor 的处理:保留英文原文) 前些日子,[我简单地写了一编关于它的文章](https://rob...阅读全文

2018-08-23 18:37:30 Alex-liutao
阅读:10620 评论:14

Golang encoding/json 的几个坑

decode(map) 之后 int 会变成 float64 思考一下,把一个 map encode 之后再 decode,结果和原来的 map 是否相等?直觉上肯定是对的,然而... 看一段代码(https://play.golang.org/p/DHb-kZNHidd): m := make(map[int]interface{}) m1 := make(map[int]interface{}) m[2] = 3 b, _ := json.Marshal(m) json.Unmarshal(...阅读全文

阅读:3327 评论:0

Go Channel 应用模式

目录 [−] Lock/TryLock 模式Hacked Lock/TryLock 模式TryLock By ChannelTryLock with TimeoutOr Channel 模式Goroutine方式Reflect方式递归方式Or-Done-Channel模式扇入模式Goroutine方式Reflect递归方式Tee模式Goroutine方式Reflect方式分布模式Goroutine方式Reflect方式eapacheDistributeTeeMultiplexPipe集合操作sk...阅读全文

2018年03月26日 smallnest
阅读:694 评论:0

Go 语言中的 Timer Routines 与优雅退出

在我的 Outcast(译注:作者自己做的一款天气预告 App) 数据服务器中,有几个数据检索任务要用到不同的 Go routine 来运行, 每个 routine 在设定的时间间隔内唤醒。 其中最复杂的工作是下载雷达图像。 它复杂的原因在于:美国有 155 个雷达站,它们每 120 秒拍摄一张新照片, 我们要把所有的雷达图像拼接在一起形成一张大的拼接图。(译注:有点像我们用手机拍摄全景图片时,把多张边缘有重叠的图片拼接成一张大图片) 当 go routine 被唤醒去下载新图像时,它必须尽快为...阅读全文

2018-09-07 09:55:04 Alex-liutao
阅读:2242 评论:0

阿里P8架构师谈:如何搭建亿级并发系统的性能指标体系

性能指标的分类为了更好的去监控整个系统的性能,做好全流程的优化,主要分为3类:1.感知系统性能这类指标主要从工程师的角度去衡量,如后端的:响应时间当前并发的用户数请求数请求的错误率等等。2.用户体验性能用户实际感觉网页是否加载延迟首屏时间白屏时间完全加载时间之类3.系统性能这类指标重点查看服务器:服务器的cpu内存网络带宽流量等等物理资源。对于上述的每一类,衡量标准可能都不一样,在数据展示方面,主要通过趋势图和汇总表格来展现,下面来对这3类指标分别细说:感知系统性能这类指标主要为工程师设计,来衡...阅读全文

阅读:1691 评论:0

GO-ruantime

runtime 包 提供了运行时与系统的交互,比如控制协程函数,触发垃圾立即回收等等底层操作,下面我们就运行时能做的所有事情逐个进行说明与代码演示 1.获取GOROOT环境变量 2.获取GO的版本号 3.获取本机CPU个数 4.设置最大可同时执行的最大CPU数 5.设置cup profile 记录的速录 6.查看cup profile 下一次堆栈跟踪数据 7.立即执行一次垃圾回收 8.给变量绑定方法,当垃圾回收的时候进行监听 9.查看内存申请和分配统计信息 10.查看程序正在使用的字节数 11....阅读全文

2018-09-20 13:42:18 wx5ba3323aac676
阅读:1337 评论:0

为什么分布式一定要有Redis?

考虑到绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。所以我斗胆以 Redis 为题材,对 Redis 常见问题做一个总结,希望能够弥补大家的知识盲点。本文围绕以下几点进行阐述:为什么使用Redis使用Redis 有什么缺点单线程的Redis 为什么这么快Redis 的数据类型,以及每种数据类型的使用场景Redis 的过期策略以及内存淘汰机制Redis 和数据库双写一致性问题如何应对缓存穿...阅读全文

2018-09-25 17:30:29 Javatiankenglu
阅读:6338 评论:5

go validators用法详解 对struct字段进行参数验证

golang小菜一枚,业务中有对接口struct字段进行参数验证的需求,为了练手,自己造了个go validators验证器的轮子,代码在github,使用的详细方法写到这里,欢迎大大们提出宝贵建议,也希望大家在使用过程遇到问题来这提问 在编写golang接口时,需要对接收到的struct字段内容进行验证,比如 type Student struct { Uid int64 Name string Age int64 Sex string Email string } 我们需要对结构体内的字段进...阅读全文

2018.10.11 23:26* smoke_zl
阅读:8685 评论:2

Golang定时器陷阱

所谓陷阱,就是它不是你认为的那样,这种认知误差可能让你的软件留下隐藏Bug。刚好Timer就有3个陷阱,我们会讲 1)Reset的陷阱和 2)通道的陷阱,3)Stop的陷阱与Reset的陷阱类似,自己探索吧。 Reset的陷阱在哪 Timer.Reset()函数的返回值是bool类型,我们看一个问题三连: 它的返回值代表什么呢? 我们想要的成功是什么? 失败是什么? 成功:一段时间之后定时器超时,收到超时事件。 失败:成功的反面,我们收不到那个事件。对于失败,我们应当做些什么,确保我们的定时器发...阅读全文

阅读:746 评论:0

GRPC状态码

使用grpc的时候,线上php客户端调用go服务端,出现2/5/14等状态码,没有做日志输出,导致问题查了很长时间,最终问题是因为连接没有close掉,连接数不够了。 grpc的状态码在google.golang.org/grpc/codes:codes中,整理下状态码的翻译: 0:Ok:返回成功 1:Canceled:操作已取消 2:Unknown:未知错误。如果从另一个地址空间接收到的状态值属 于在该地址空间中未知的错误空间,则可以返回此错误的示例。 没有返回足够的错误信息的API引发的错误...阅读全文

2018.11.16 10:58 王先森QAQ
阅读:4861 评论:0

Golang 随机生成中国人姓名

package utils import ( "math/rand" "time" "fmt" ) var lastName = []string{ "赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", ...阅读全文

2018.11.26 09:46 howie_鲸落
阅读:26033 评论:6

SRE: 性能分析: 一个 Go 编写的简单 HTTP Web 服务器的优化方法

​性能分析和调优是一种很强大的技术,用来验证是否满足客户关注的性能要求。性能分析常常被用来分析一个程序将大部分时间花在哪里了,并通过一个科学的方法来测试调优实践的效果。这个帖子使用一个 Go 语言编写的 HTTP 服务作为一个例子来定义一种性能分析和调优的普遍方法。go 特别适合性能分析和调优,因为它在它的标准库中提供了 [pprof](https://golang.org/pkg/runtime/pprof/) 剖析工具链。 ## 策略 我们先尝试建立一个简单的框架来构建对程序的分...阅读全文

2019-01-02 19:43:16 daliny
阅读:1799 评论:1

Golang 和本地数据存储 - 快速灵活的数据存储

如果要构建包含多个实例或者多个丰富数据模式的 Web 应用程序,本地数据存储可能不适用。但是在寻找真正的快速临时存储或者构建自己的副本的时候,本地存储却是需要了解的一个重要的组成模块。 在这篇文章中,我将展示如何在 Go 中使用 Memcached 协议来构建一个名为 Beano 的本地键 / 值对数据库服务器,并且该数据库可以优雅地热交换其整个数据集。 ## Go 数据存储类库的简单选择 我已经使用过 SQLite,BerkeleyDB 并了解 InnoDB,但出于种种原因,...阅读全文

2019-01-13 11:46:58 lovechuck
阅读:2336 评论:0

如何将ffmpeg封装golang/cgo库

本文通过ffmpeg编程的例子来讲述如何封装cgo库更多内容访问我的博客 前言 继上一篇 ffmpeg音视频C编程入门, 使用高性能的C语言进行音视频的处理,比较执行效率比较高,但是业务需求,快捷开发需要使用更方便的语言,比如 golang,本文介绍如何将 将视频转成GIF 的C语言方法封装成 golang 方法以便调用。(不明白的同学请点击上面链接多了解) 认识cgo的封装技巧 最简单的 cgo 封装例子看这篇 cgo快速入门 我这里讲几个注意事项 CGO构建程序会自动构建当前目录下的C源文件...阅读全文

2019-01-22 16:34:41 光鱼
阅读:4909 评论:0

K8S容器编排之ConfigMap 用于动态应用程序的实践

导言:在 Kubernetes 中,ConfigMap 是允许管理员将配置组件与镜像内容解耦,使容器化应用程序产生可移植性的一种资源。ConfigMap 可以与 Kubernetes Pod 一起使用,用于动态添加或更改容器中的使用文件。本文将阐述 Kubernetes ConfigMap 如何利用动态应用程序的方法来解决轻量级文件服务器部署到 Kubernetes 集群中的问题。 ConfigMap 概览 生产环境中很多应用程序的配置可能需要通过配置文件、命令行参数和环境变量的组合来完成。这些...阅读全文

阅读:956 评论:0

Golang封装RabbitMQ

程序封装 package rabbitmq import ( "fmt" "github.com/streadway/amqp" "time" ) // 定义全局变量,指针类型 var mqConn *amqp.Connection var mqChan *amqp.Channel // 定义生产者接口 type Producer interface { MsgContent() string } // 定义接收者接口 type Receiver interface { Consumer([]b...阅读全文

阅读:2330 评论:3

Go语言破解SSH服务器

**需求和思路分析** - 现在的很多小伙伴们都拥有了自己的云服务器了,lots of them! - 平时大家是怎么做服务器管理的呢?相信多数人都是通过SSH客户端连接过去的吧; - 无论PUTTY还是XShell,我们只需要一个登陆密码,就能轻松地登陆到远程服务器终端,然后对我们的服务器做任何事情; - 只需要一个密码就可以了! - Go语言有SSH连接的第三方库,参数自然是用户名、密码、远程IP和端口,而密码我们可以通过暴力枚举来进行破解; **建立靶机** ...阅读全文

2019-03-05 10:38:53 Amiee7
阅读:2634 评论:3