Dai Jie

Results 247 comments of Dai Jie

@xenv 直接传函数没有问题,事实上是讨论接口作为参数和函数作为参数的孰优孰劣的问题。即: ```go NewGroup(name string, cacheBytes int64, getter Getter) // VS NewGroup(name string, cacheBytes int64, getterF GetterFunc) ``` 将某个/某几个方法封装为 interface{},一般是为了获得更好的语义性和通用性。函数作为参数,是固定的,接口作为参数,便于扩展(接口内新增方法)。 在这个地方 `GetterFunc` 是一个接口型函数,自己是一个函数类型,同时呢实现了接口 `Getter`。因此,参数 getter 既支持传入实现了接口 `Getter` 的结构体,也支持直接传入函数(可以被转换为GetterFunc类型)。 很多标准库/开源库都选择传递接口而非函数,比如 `net/http`...

@zhuyanxi 一般来说,可以用缓冲区来提高写性能,但会牺牲读性能。很多数据库会做这样的优化,先并发写在缓冲区,查找时,多一步缓冲区的查询。

@wuqinqiang 只需要对 map 加锁,当时觉得 g 的构造不耗时,习惯了使用 defer 语法释放锁,就这么写了。

@pteric,这个问题其实前面的评论讨论得比较多了。首先,直接使用 GetterFunc 这个类型是没有问题的。 这种写法称之为函数式接口或者接口型函数。不管是使用、可读性、可维护性都会好很多。从使用角度说,@xenv 的评论的最后一点是很清楚的,参数如果是接口,用户有更大的空间控制外部的变量;如果是函数,就很可能需要闭包类似的机制来实现了。 比如用户需要使用外部数据库,如果是接口类型,结构体 DB 可以作为参数赋值给 getter: ```go type struct DB { url string connPool ConnPool ... } func (db *DB) Get (key string) ([]byte, error) { conn...

@Jim-Luo 强制类型转换,小括号前面是函数类型,比如将函数 f 转换为 `GetterFunc` 类型:`GetterFunc(f)`。调用函数,小括号前面是一个函数实例,比如 : ```go var f GetterFunc = func() { } f(argv...) ``` 函数类型是不能直接调用的,函数实例才可以,应该不存在强制转换和调用区分的问题。

@shuhen 可以检查下传递给 `model.fit`的`x`和`y`的值,是不是有异常,可以看下最大值,最小值啥的。

@shiluoye 嗯,这个地方使用接口的确更合适。判断是否实现了某个接口,实现了则调用。之前合入过一个 PR,`ITableName` 自定义表名的,如果实现了该接口,就使用 `ITableName` 返回的字符串作为表名。

@hanxiatu-fc 我和主题放在一个仓库了,一个额外的分支,算是归档吧。不想独占一个仓库了,以后不维护了,意义不大。又不忍心删了。