Go 语言实现jpg和png图片的批量压缩
记录笔记或者写博客的时候经常会直接复制mac截图插入图片,默认复制得到的是无损png图片,图片体积比较大,占空间带宽,就基于go实现了个命令行批量压缩工具。 ...
记录笔记或者写博客的时候经常会直接复制mac截图插入图片,默认复制得到的是无损png图片,图片体积比较大,占空间带宽,就基于go实现了个命令行批量压缩工具。 ...
问题提出 提出这个问题主要是因为日常开发中有这样的场景,比如服务配置热加载或者一些全局缓存的异步更新,通常会单独启一个协程去获取最新数据再通过赋值更新原数据。因为更新逻辑是单独的协程,变量的写和读就存在并发访问的情况,于是就有了这个问题。一个简单异步刷新例子 如下: ...
命名是编码过程中让程序员十分纠结的一个点,就像每天饭点纠结选择吃什么饭一样,常见且令人抓头,为此专门有人开发了各种命名神器。命名也是十分能体现一个程序员编码水平的一项,好的命名一定程度能代替代码注释,让代码更加清晰易阅读。好的命名取决于你的词汇量、对业务逻辑的理解以及命名过程中的一些通用规范。遵循一定的命名规范,可以使得代码更加优雅,写起代码来更加如鱼得水。Go语言中主要涉及到包命名、文件命名、结构体命名、接口命名、变量命名下面一一介绍这些相关部分的命名规范。 ...
Go语言处理zip压缩还是比较方便的,可以直接使用Go标准库archive/zip。下面记录下具体使用方法,以及注意事项。 ...
最近搞出来一个挺弱智的问题,记录一下,以示警戒。代码主要逻辑如下,使用 select和time.After()实现超时控制,doSomething()一定会返回结果。 ...
最近使用xorm更新db的时候碰到一个挺有意思的问题,db中字段类型是日期datetime,对应go model中的字段是time.Time类型,在分别使用model和map两种方式进行更新时,使用model的方式更新能得到正确结果,db中的日期能被更新成当地时间;使用map kv的方式进行更新时db中的字段被更新成了格林尼治标准时间。都是取的go time.Now为什么更新结果不一样呢? // demo type TimeTest struct { ID int64 `xorm:"not null pk autoincr INT(11) 'id'"` UpdateTime time.Time `xorm:"update_time"` } func UpdateTime(o *xorm.Session) { o.Table(new(TimeTest)).Where("id = ?", 1).Update(&TimeTest{ UpdateTime: time.Now(), }) o.Table(new(TimeTest)).Where("id = ?", 1).Update(map[string]interface{}{ "update_time": time.Now(), }) } ...
分布式限流器也是项目开发中常用的,基于redis incr指令可以比较方便快捷的实现一个分布式限流器,因为这个指令自身的原子性,所以不用开发者考虑计数过程的并发问题。下面是go代码实现。 ...
最近经常用go写一些脚本,为了执行效率,一般会开启多个goroutine并发执行,脚本中通常会调用一些线上服务或者数据库读写数据,为了不影响线上服务运行,为了不影响线上服务运行就要对执行的goroutine数量进行限制,避免并发太大打垮线上服务。下面就简单写一个goroutine并发控制器。 ...
生成二进制可执行文件 首先,写一个go main函数,这里就简单输出以下hello world。 package main import "fmt" func main() { fmt.Println("hello word") } 执行go build -gcflags "-N -l" -ldflags=-compressdwarf=false -o main main.go生成可执行二进制文件。 开启gdb调试 执行gdb main开始gdb调试。通过i files查看程序入口地址,再这个地址打上断点。 ...
功能列表 支持linux、darwin 获取远程go版本列表 gvm remote ...