Saki's 研究记录

Zinc 全文索引的搜索引擎 —— 部署[1]
简介 官网: zincsearch项目地址: zinc,该项目开源目前 Star数 9.7k+。开源协议:Apache 2.0 Zinc 是一个进行全文索引的开源搜索引擎,企业内部搭建搜索引擎常用 Solr、Elasticsearch,它们都是使用 Java实现的,底层依赖 Lucene,Java相对来说占用较多内存。 Zinc目标就是作为 Elasticsearch的轻量级替代品。 Zinc运行所需的内存不到 100 MB,使用 bluge(bulge是 Golang实现的全文检索库,功能上类似 lucene)作为底层索引库。与 elasticsearch相比,它非常简单且易于操作。...
Parsing a Redis connection string
背景最近在工作中需要访问redis,为了方便使用,将redis的地址、端口、密码等写到配置中读取。例如: 12345# redis configurationredis: db: 0 addr: 'redis-ip:10086' password: '******' 这样配置是没问题的,但计划赶不上变化,当需求改成写个命令行工具来读访问 redis时,就用不上配置文件了。redis的配置需要从命令行的参数传入,例如: 1cmd subcmd --redis_addr 'redis-ip:10086' --redis_pw...
实时性能分析工具Pyroscope
背景当服务上线后,流量增加或短暂功能故障,都会造成用户体验变差,而这时怎样才能快速找到性能瓶颈呢?这次将会介绍一套实时性能分析工具——pyroscope,让开发者可以快速定位到造成性能瓶颈的代码,而且目前还支持在 Python、Rust 或 Go 的环境。下面将主要针对 Go 环境做介绍。 什么是 Pyroscope ?Pyroscope 是一套开源的实时性能监控平台,简单的 Agent-Server 框架,让开发者可以轻松监控服务的性能,不管是要找10秒还或是多年的性能数据,都可以快速的实时呈现。由于采样分析技术,CPU 开销较低,开发者用不用在意安装此监控会不会造成任何性能上的负担...
Golang 1.18 工作区模式(workspace mode)
环境 OS: Darwin Kernel Version 21.4.0GO: go version go1.18 darwin/arm64 背景Go1.18 最 “实用“ 的功能,应该是 Go 工作区模式,它使得开发者在多个模块中的开发工作变得更加简单。 使用在同一个目录下创建两个空的 go 包 demo 和 util。 1mkdir -p workspace_mode_example/{demo,util} 然后分别使用 go mod init 来初始化。 1234cd workspace_mode_example/demogo mod init workspa...
Golang 1.18 报错:linkname must refer to declared function or variable
问题最近在mac上升级golang到1.18版本,新建gin服务执行go run时报错: 123456789101112# golang.org/x/sys/unix../../../../go/pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/syscall_darwin.1_13.go:25:3: //go:linkname must refer to declared function or variable../../../../go/pkg/mod/golang.org/x/sys@v0.0.0-2...
golang embed 使用
简介特性//go:embed,它的作用就是可以在Go语言应用程序中包含任何文件、目录的内容,也就是说我们可以把文件以及目录中的内容都打包到生成的Go语言应用程序中了,部署的时候,直接扔一个二进制文件就可以了,不用再包含一些静态文件了,因为它们已经被打包到生成的应用程序中了。 样例目录结构创建目录: 1mkdir -p embed_example/{static,templates} 目录结构: 123456789101112cd embed_example; tree.├── go.mod├── go.sum├── hello.txt├── main.go├── st...
golang parse df -h output hard way
背景最近有个场景,需要解析远程调用命令df -h,输出的格式类似CentOS下的输出: 123456789# df -hFilesystem Size Used Avail Use% Mounted on/dev/vda1 99G 5.5G 89G 6% /devtmpfs 3.8G 0 3.8G 0% /devtmpfs 3.8G 24K 3.8G 1% /dev/shmtmpfs 3.8G 274M 3.6G 8% /runtmpfs 3.8G...
golang: alpine image 编译 sqlite3
背景最近在看一个Golang的开源项目,项目中使用到了GORM但只支持了MySQL和PostgreSQL,为了练手尝试添加对SQlite的支持。 1234import ( "gorm.io/driver/sqlite" "gorm.io/gorm") 编写完代码后在本地go run运行很正常,但当使用alpine构建docker镜像时遇到了问题… 问题编译会卡在sqlite3,报错信息为: 1212 73.08 # github.com/mattn/go-sqlite312 73.08 cgo: C compiler "gcc"...
go get fails with permission denied on certain go packages
Permission denied下载第三方库的时候,编译时会提示Permission denied权限不足,出现这种错误因为权限不够。有一种最快的办法就是把你的go目录权限放开: 1sudo chmod -R 777 -R go Reference`go get` fails with permission denied on certain go packages Done.
Golang 交叉编译报错 XX is invalid in C99
环境 macOS: 11.6.1 (Big Sur)gcc version: apple clang version 13.0.0 (clang-1300.0.29.3)Ubuntu: 16.04.6 LTSCentOS: Linux release 8.4.2105 (Core) 背景最近在使用redis-full-check来对比两个redis的数据是否一致,在macos上进行开发,编译后再上传到ubuntu系统的服务器上运行。 问题这就导致我需要使用到golang的交叉编译,golang默认支持交叉编译,只在编译时配置对应平台的编译参数即可: 123456# linuxCGO_E...