project1 server_test.go问题

image
这里NewServer(s),s是storage.Storage的实现,但是报错,加上&就不报错了
image
但是这个方法参数不是指针啊

1 个赞

没太看懂描述。。。你的“&”是加在哪里后不报错的?

1 个赞

就是箭头指的那个s,默认没有但是报错

1 个赞

那个参数是interface,你是storage*实现了那个interface,不是storage

1 个赞

当然得看你的NewStandAloneStorage返回值有没有改动了

1 个赞

s 是 NewStandAloneStorage 的实现,返回的是一个指针。

可能是还没有实现这个函数,s 没有获得相应的指针,获得的是一个 nil 。而如果加了&,NewServer 中的参数 storage 就有值了,这才没有了报错。

所以我觉得解决方案是你实现一下这个函数,或者是之前实现的有问题要改一下。记得返回一个 &StandAloneStorage 类型的就 ok 了。

1 个赞

说明你的 Standalone Storage 没有完全实现 Storage 接口的方法,检查下是否漏掉了。
如果全部实现了的话,这里是不可能报错的。

已经实现了,goland可以显示


但是我这里返回的不是指针,那边的参数也不是指针,但是给s加上&s才不会报错
@DataKu @roseduan_KV-Killer @LimingFang_杰尼龟铁憨憨

1 个赞

哦,那应该是 NewStandaloneStorage 这个方法应该返回指针。

这里默认就是这样的。

你要不去看一下你的函数是不是最新的文件
https://github.com/tidb-incubator/tinykv/blob/98138e859e71ed8aad6cb990f7095e2efeb3ba67/kv/storage/standalone_storage/standalone_storage.go#L15

1 个赞

哦哦好我看看

@DataKu @roseduan_KV-Killer 感谢回答,但是主要想问问这个函数参数也没要求指针啊,为什么需要传入指针
image

Storage 是个 interface 类型,这种类型做为参数时,其实现必须传指针。

1 个赞

哦哦懂了,感谢,查到了,实现如果有指针接收者就必须传指针

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。