小编use*_*495的帖子

Golang函数指针作为结构的一部分

我有以下代码:

type FWriter struct {
    WriteF func(p []byte) (n int,err error)
}

func (self *FWriter) Write(p []byte) (n int, err error) {
    return self.WriteF(p)
}

func MyWriteFunction(p []byte) (n int, err error) { 
    // this function implements the Writer interface but is not named "Write"
    fmt.Print("%v",p)
    return len(p),nil
}

MyFWriter := new(FWriter)
MyFWriter.WriteF = MyWriteFunction
// I want to use MyWriteFunction with io.Copy
io.Copy(MyFWriter,os.Stdin)
Run Code Online (Sandbox Code Playgroud)

我想要做的是创建一个Writer接口来包装MyWriteFunction,因为它没有命名为"Write",我不能将它用于任何需要"Writer"接口的东西.

这段代码不会起作用,因为它抱怨:

method MyWriterFunction is not an expression, must be called
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?如何将WriteF设置为MyWriteFunction?

注意:我尽可能地简化了这个问题,实际上我有一个具有MyWriteFunction和一个普通Write函数的结构,所以它有点复杂......(如果有更好的方法来解决我的这个问题)那么我很高兴听到它!)

谢谢!!


编辑::我注意到我的拼写错误并修复了它(MyWriterFunction - …

interface function go writer

16
推荐指数
2
解决办法
3万
查看次数

Google App引擎数据存储区实际应用示例

问题

经过几天的阅读应用程序引擎和数据存储的文档后,我似乎无法理解如何构建一个真实的可伸缩应用程序.

我也找不到最佳实践的好例子.确定我可以使我的应用程序工作,但我不知道是否有利于扩展到我的开发环境可以提供的负载以上.

它清楚地说明了使用数据存储区应用程序引擎教程:"但是,您可以写入同一实体组的速率限制为每秒写入实体组一次.当您设计一个真实的应用程序时,你'我需要记住这个事实."

假设

假设我理解的内容(请纠正我,如果我错了),假设数据存储根是/ then/Users/*(Keys)是实体组而/ Products/Beauty/*是受实体组影响的实体组之前的限制为每秒1次写入.(是/产品/美容/*受限于/ Products/*以及?)

我错过了解这个吗?

让我们假设我们想要构建一个真实的聊天应用程序或购物应用程序.这些应用程序必须存储用户将在应用程序上执行的许多操作的数据.比如发送消息或评论产品或删除/添加/编辑产品.

鉴于这些操作,数据存储应该如何?当然,我们无法将消息存储为/ Messages/{Message,To,From,Timestamp},因为许多用户将发送必须写入此密钥的消息.另一种方法是每秒限制用户每1条消息并将其存储在他的配置文件/ Users/{USER}/{Message,To,From,Timestamp}中,但只有一个用户可以写入该实体组.所以我们可以把它们放在根目录上:/ {USER}/{Message,To,From,Timestamp}但是它被认为是一个好习惯吗?是否足够快速查询数据存储区以获取用户之间的所有消息?(有效吗?可能吗?)

另一种方法是将所有内容存储在数据存储区的根目录中,作为"消息"和"用户","产品"和"类别"(例如,产品中将包含类别引用).

摘要

  1. 我在哪里可以找到对数百万用户有利的代码示例或设计手册?
  2. 我错了什么吗?
  3. 有关该主题的任何建议吗?

我找到了这些代码示例,但我没有工具或想法如何知道这些是否是规模的任何良好实践?

谢谢!

google-app-engine google-cloud-datastore

6
推荐指数
2
解决办法
1822
查看次数