摘要:
go build 命令一些可选项的用途和用法 在运行go build命令的时候,默认不会编译目标代码包所依赖的那些代码包。当然,如果被依赖的代码包的归档文件不存在,或者源码文件有了变化,那它还是会被编译。 如果要强制编译它们,可以在执行命令的时候加入标记 -a。此时,不但目标代码包总是会被编译,它依 阅读全文
摘要:
问题描述 使用vmware新建服务器,明明给系统盘分配了一个200GB的磁盘空间,服务器创建成功后,但是服务器中启动一个大小约为11GB的docker服务却提示 磁盘空间不足 no space left on device。 解决过程 检查磁盘挂载详情 `[root@SkyEye ~]# lsblk 阅读全文
摘要:
简介 通常一个独立的服务,程序,中间件成后,为便于测试,上线部署都会编写一一个shell用于对程序的启动,重启 ,查看状态,停止,卸载 等动作, 以下是 一个使用shell脚本来实现的简单demo, 直接见代码。 功能 启动: start 重启: restart 停止:stop 卸载:uninsta 阅读全文
摘要:
场景描述 起因: 因项目需求,需要编写一个agent, 需支持Linux和Windows操作系统。 Agent里面有一个功能需要获取到服务器上所有已经被占用的端口。 实现方式:针对不同的操作系统,实现方式有所不同 linux: 使用服务器自带的 netstat 指令,然后使用 os/exec 库来调 阅读全文
摘要:
JWT是什么 JSON Web Token (JWT) 是一个开放标准 (RFC 7519),它定义了一种紧凑、独立的方式,可以用 JSON 对象在双方之间安全地传输信息。由于经过了数字签名,因此这些信息是可以验证和信任的。JWT 可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 阅读全文
摘要:
> 问:有一个postgres数据表,表中有update_time, create_time关于时间戳的字段,选择某个时间段,计算出update_time减去create_time的值做为耗时时间的字段duration_time,统计出在这段时间内耗时时间的平均值,中位数值,最大值,和最小值,请问如 阅读全文
摘要:
1. 前言 所谓的逃逸分析(Escape analysis)是指由编译器决定内存分配的位置吗不需要程序员指定。 函数中申请一个新的对象 如果分配在栈中, 则函数执行结束后可自动将内存回收 如果分配在堆中, 则函数执行借宿可交给GC(垃圾回收)处理 有了逃逸分析,返回函数局部变量将变得可能,除此之外, 阅读全文
摘要:
1. 前言 kafka作为数据中间键在数据服务解耦,大数据,日志方面堪称一把瑞士军刀,备受青睐,作为提供了一套完整命令行的程序,日常进行调试过程中难免会用到一些指令,现总结18条最常用指令。 2. 常用指令 启动消费者 bin/kafka-console-consumer.sh --bootstra 阅读全文
摘要:
1. 问题 golang构建程序很简单,当遇到需要调用c库时,如通常使用 net,kafka, sqlite3 程序运行时就会调用当前服务器的 动态库,如果遇到没有库时,通常还需要 下载比如 alpine需要安装sqlite apk add --no-cache sqlite-libs sqlite 阅读全文
摘要:
1. 前言 Go 语言中两个经常成对出现的两个关键字 — panic 和 recover。这两个关键字与上一节提到的 defer 有紧密的联系,它们都是 Go 语言中的内置函数,也提供了互补的功能。 需要说明两点 panic 能够改变程序的控制流,调用 panic 后会立刻停止执行当前函数的剩余代码 阅读全文
摘要:
1. 简介 defer 会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。 理解这句话主要在三个方面: 当前函数 返回前执行,当然函数可能没有返回值 传入的函数,即 defer 关键值后面跟的是一个函数,包括普通函数如(fmt.Println), 也可以是匿 阅读全文
摘要:
一.序 这一篇算是并发编程的一个补充,起因是当前有个项目,大概の 需求是,根据kafka的分区(partition)数,创建同等数量的 消费者( goroutine)从不同的分区中消费者消费数据,但是总有某种原因导致,某一个分区消费者创建失败,但是其他分区消费者创建失败。 最初的逻辑是,忽略分区失败 阅读全文
摘要:
1. 引言 关于闭包的说明,曾在很多篇幅中都有过一些说明,包括Go基础--函数2, go 函数进阶,异常与错误 都有所提到, 但是会发现,好像原理(理论)都懂,但是就是不知道如何使用,或者在看到一些源码时,依然一头雾水。 刚好今天看到了一篇优质的博客,并结合以前几篇关于类似闭包的介绍,再次对 闭包进 阅读全文
摘要:
1. 什么是边界检查? 边界检查,英文名 Bounds Check Elimination,简称为 BCE。它是 Go 语言中防止数组、切片越界而导致内存不安全的检查手段。如果检查下标已经越界了,就会产生 Panic。 边界检查使得我们的代码能够安全地运行,但是另一方面,也使得我们的代码运行效率略微 阅读全文
摘要:
一.前言 1.1 为什么需要Singleflight? 很多程序员可能还是第一次听说,本人第一次听说这个的时候以为翻译过来就是程序设计中被称为的是 "单例模式"。 google之后二者天壤之别。 一般情况下我们在写一写对外的服务的时候都会有一层 cache 作为缓存,用来减少底层数据库的压力,但是在 阅读全文
摘要:
一.设计原理 Go 语言中最常见的、也是经常被人提及的设计模式就是: "不要通过共享内存来通信,我们应该使用通信来共享内存" 通过共享内存来通信是直接读取内存的数据,而通过通信来共享内存,是通过发送消息的方式来进行同步。 而通过发送消息来同步的这种方式常见的就是 Go 采用的通信顺序进程 CSP(C 阅读全文
摘要:
一. 序言 1.1 场景一 现在有一个 Server 服务在执行,当请求来的时候我们启动一个 goroutine 去处理,然后在这个 goroutine 当中有对下游服务的 rpc 调用,也会去请求数据库获取一些数据,这时候如果下游依赖的服务比较慢,但是又没挂,只是很慢,可能一次调用要 1min 才 阅读全文
摘要:
一. 前言 了解 sync.WaitGroup的用法都知道 一个 goroutine 需要等待多个 goroutine 完成和多个 goroutine 等待一个 goroutine 干活时都可以解决问题 WaitGroup 的确是一个很强大的工具,但是使用它相对来说还是有一点小麻烦, 一方面我们需要 阅读全文
摘要:
一.序 单从库名大概就能猜出其作用。sync.Once使用起来很简单, 下面是一个简单的使用案例 package main import ( "fmt" "sync" ) func main() { var ( once sync.Once wg sync.WaitGroup ) for i := 阅读全文
摘要:
一. 序言 WaitGroup是Golang应用开发过程中经常使用的并发控制技术。 WaitGroup,可理解为Wait-Goroutine-Group,即等待一组goroutine结束。比如某个goroutine需要等待其他几个goroutine全部完成,那么使用WaitGroup可以轻松实现。 阅读全文
摘要:
常用指令 查看防火墙状态 firewall-cmd --state 停止firewall systemctl stop firewalld.service 禁止开机启动 systemctl disable firewalld.service 开放某个服务端口--允许所有IP访问 firewall-c 阅读全文
摘要:
1. 场景 这两天一直被这个sqlit3困扰,起因是项目中需要有这样一个中间,中间件承担着API角色和流量转发的角色,需要接收来自至少300个agent的请求数据,和健康检测的请求。 所以当即想到用go来实现,因为数据教训,不考虑使用pg大型数据库,所以就选择了轻量化的sqlite数据库。程序很快就 阅读全文