2021
06-19
06-19
Golang 获取文件md5校验的方法以及效率对比
近期有一个需求:获取多个文件md5校验和判断是否存在重复文件,因为文件数量较多,有的文件还比较大,需要处理的文件还没有到位,我就考虑了一下效率的问题。目前我已知的Golang中获取md5校验和的方法有两个这里直接给出实现源码。packagemainimport("crypto/md5""flag""fmt""io""io/ioutil""os")varwhich=flag.Bool("which",true,"")varpath=flag.String("path","","")varcnt=flag.Int("cnt",100,""...
继续阅读 >
如果全局变量只读取那自然是不需要加锁的如果全局变量多进程读,多进程写,那自然是需要加读写锁的但是如果全局变量只有一个进程写,其他进程读呢?如果采用COW的方式,写进程只是通过单次赋值的方式来更新变量,是否就可以不加锁了呢?就第三种情况而言:当然我们通过gobuild-race或者gorun-race就会出现WARNING:DATARACE。但是出现datarace就证明一定有问题么?其实核心点在于这个赋值是否是原子的。也就是说是...
监听服务的信号,实现平滑启动,linux信号说明packagemainimport("context""fmt""golang.org/x/sync/errgroup""net/http""os""os/signal""syscall")funcmain(){g,ctx:=errgroup.WithContext(context.Background())fmt.Println("服务启动start!")addr:=":9091"s:=&http.Server{Addr:addr,Handler:http.DefaultServeMux,}g.Go(func()error{http.HandleFunc("/test1",func(writerhttp.Respons...
gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remoteprocedurecalls)。gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,接收端使用Decoder将序列化的数据变化成本地变量。基本使用packagemainimport("bytes""encoding/gob""fmt")typeMsgDatastruct{X,Y,ZintNamestring}varnetworkbyte...