最近碰到一个坑

golang中的orm库: xorm

如果不显示传入表名的话,xorm库可以根据你传入的struct主动调用定义的Tablename()方法去推断表名的。

但是这个表名是有缓存的,缓存的结构是map[reflect.Type]string,如果能读到缓存,不会调用Tablename()方法。

最近碰到的坑就是我们在业务层做了分表,导致不能依赖这种隐式推出表名的方法。

对于分表而言,传入的struct是相同的,所以reflect.Type也是相同的,所以只会在缓存不存在的时候调用Tablename()方法。