用Golang对文件Hash

用Golang对文件Hash

曾几何时,题主曾用golang写过一个hash的工具,这次打算测试一下对文件的几种不同读取方式的比较。

  • 使用io/ioutl.ReadAll
  • 使用io.Copy
  • 使用bufio.Reader+io.Copy

当前目录下有个20M左右的文件poe.tgz,新建了main_test.go文件,这次使用SHA1测试。
READ MORE

GC和Finalizer

GC和Finalizer

最近在做一个golang的连接池。测试过程中发现一个有趣的现象,获取的连接没有归还给连接池,那么过一段时间后该连接会自动关闭掉。猜测这跟连接池应该是没有关系的,于是再用普通的连接做了实验,即dial一个tcp连接,发送请求,然后程序进入sleep,一段时间后该连接还是会自动关闭。

对这个过程进行抓包分析,发现主动关闭连接的是client端,即client端主动向服务端发送了FIN包。
READ MORE

一次关于TMPDIR的调试

一次关于TMPDIR的调试

前些日子,自己玩一个golang项目,为了方便,写了个Makefile,大致内容如下:

PWD := $(shell pwd)
PKG := github.com/ckeyer/bat
TMPDIR := bundles

build:
  go build -o $(TMPDIR)/app main.go

/// 其它忽略。。。

READ MORE

Go语言反射规则-The Laws of Reflection

Go语言反射规则-The Laws of Reflection

介绍

反射在计算机的概念里是指一段程序审查自身结构的能力,主要通过类型进行审查。它是元编程的一种形式,同样也是引起混乱的重大来源。

在这篇文章里我们试图阐明Go语言中的反射是如何工作的。每种语言的反射模型是不同的(许多语言不支持反射),然而本文只与Go有关,所以我们接下来所提到的“反射”都是指Go语言中的反射。

类型与接口

由于反射是建立在类型系统(type system)上的,所以我们先来复习一下Go语言中的类型。

READ MORE