本文为 2025年12月工作生活总结。
研发编码
git push推送失败记录
执行git push命令推送代码到远程仓库,提示如下错误:
$ git push
Enumerating objects: 217, done.
Counting objects: 100% (217/217), done.
Delta compression using up to 8 threads
Compressing objects: 100% (137/137), done.
Writing objects: 100% (143/143), 2.18 MiB | 1.45 MiB/s, done.
Total 143 (delta 73), reused 6 (delta 0), pack-reused 0
error: RPC failed; curl 56 Recv failure: Connection was reset
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
Everything up-to-date
尝试各式方法,失败。最后修改所用的方式,使用 SSH 代替 HTTP 。修改.git/config文件,如下:
原:
http://172.18.18.188:8888/latelee/webdemo.git
新:
git@172.18.18.188:latelee/webdemo.git
go编译出现内部错误
上个月升级了go到1.24版本。编译某个工程出错,提示:
# runtime
/usr/local/go/src/runtime/lfstack_64bit.go:41:6: lfstackPack redeclared in this block
/usr/local/go/src/runtime/lfstack.go:71:6: other declaration of lfstackPack
/usr/local/go/src/runtime/lfstack_64bit.go:48:6: lfstackUnpack redeclared in this block
/usr/local/go/src/runtime/lfstack.go:75:6: other declaration of lfstackUnpack
/usr/local/go/src/runtime/map.go:815:6: mapiterinit redeclared in this block
经查,是因为我的升级步骤,是将go新版本安装包直接解压到目录/usr/local里,go的程序目录固定为/usr/local/go/,环境变量也不需要修改,升级十分方便,但这也导致如有老版本的话,则有些文件不会被删除,比如上述错误信息提到的lfstack_64bit.go和lfstack.go,实际上,1.24版本只有lfstack.go文件,但旧文件没有删除,因此一些变量重复定义了。先删除/usr/local/go/目录,再解压即可解决。
go文件锁的一个实现
某golang工程使用了文件锁,原来的方法利用syscall库实现,但不能跨平台,后找到第三方库github.com/gofrs/flock,可以跨平台使用。
原方法:
import "syscall"
type FileLock struct {
filename string
f *os.File // 文件描述符
}
func NewLock() *FileLock {
return &FileLock{}
}
// 加锁操作
func (l *FileLock) Lock(filename string) error {
l.filename = filename
f, err := os.Open(l.filename) // 获取文件描述符
if err != nil {
return err
}
l.f = f
err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB) // 加上排他锁,当遇到文件加锁的情况直接返回 Error
if err != nil {
return fmt.Errorf("cannot flock directory %s - %s", l.filename, err)
}
return nil
}
// 解锁操作
func (l *FileLock) Unlock() error {
defer l.f.Close() // close 掉文件描述符
return syscall.Flock(int(l.f.Fd()), syscall.LOCK_UN) // 释放 Flock 文件锁
}
使用示例:
flock *FileLock
flock = NewLock()
flock.Lock("foobar.txt")
...
flock.Unlock()
新方法:
import "github.com/gofrs/flock"
type FileLock struct {
lock *flock.Flock
}
func NewFileLock(filename string) *FileLock {
return &FileLock{
lock: flock.New(filename),
}
}
func (l *FileLock) Lock() error {
return l.lock.Lock()
}
func (l *FileLock) TryLock() (bool, error) {
return l.lock.TryLock()
}
// func (l *FileLock) LockWithTimeout(timeout time.Duration) error {
// return l.lock.LockWithTimeout(timeout)
// }
func (l *FileLock) Unlock() error {
return l.lock.Unlock()
}
使用示例:
flock := NewFileLock("foobar.txt")
flock.Lock()
...
flock.Unlock()
生活记录
带小孩玩
这个月带大锤去了动物园,1大1小,花了70块钱,加了吃的喝的,花了近100块。
这个月带大锤去看了阿凡达3,1大1小,花了100多,看是的cinity led,在网上了解感觉很大,不过实际的影厅很少,按之前的习惯,选了倒数几排。经此观影,还是要买中间的座位。
本来还是邀请大妞一起的,因为一些原因,无法成行。
参加讲座
上个月去听了陕历博馆长关于该馆的藏品的讲座,这个月又去听了关于石峡文化讲座,讲座提到了仰韶文化、龙山文化、玉器、天人观念、多元一体,等,但了解不深,于是找了个考古的视频课程,一个月听了大半,终于有些概念了。
领钱
为了让小孩熟悉习惯现金的使用,计划去银行换一些散钱。某周六去了一些银行,最终在某商银行领了钱,当然也花了一些时间。进门先是说明来意,工作人员还要确认是否有散钱,然后取号排队,在此期间,还在扫码,人脸认证,观看视频确认。由于是下午,人数不多,前后不到10分钟就搞定了。
不过小朋友们似乎对金钱没有概念,拿现金做奖励推动力不大,不愿意干家务的,还是不愿意干。
买手机
花了400多块钱在某鱼找了部二手手机,再在线下拿货。交易过程较顺利,对方给时间检查手机,当然人家也要录像拍照,最后提供收据。至此,2018年花了2千多买的使用了快8年的小米6正式退役。前几年开始,陆续换了电池和屏幕,但手机一旦拆过,就坏得快,不得不将其作为备机,现在终于换了。买备机的目的是上下班听视频,空间要足够大,能下载大量离线视频,上下班途中多少能了解点知识。