【问题标题】:Convert string data to struct: Inserted on Java AppEngine (Objectify), readed on Go AppEngine将字符串数据转换为结构:在 Java AppEngine (Objectify) 上插入,在 Go AppEngine 上读取
【发布时间】:2015-08-19 21:50:00
【问题描述】:

简介

您好,我在 Go AppEngine 上做一个模块,我在读取一些模型时遇到问题,这些模型里面有嵌套模型。模型是Party,我想要的是Permissions。但是,当我从数据存储区获取 Party 时,Permissions 结构字段的类型是字符串。

//And when I do fmt.Println(party.Permissions) show this:

%!(EXTRA string=jjrz�5878654076715008 *��jjrzshowOnMessages 
*zcanInviteAssistants *zcanInviteOrganizers *zcanEditEvent 
*zroleName *   organizerzisAdmin *�z�4709220381360128 
*��jjrzshowOnMessages *zcanInviteAssistants *zcanInviteOrganizers 
*zcanEditEvent *zroleName *ownerzisAdmin *��

那个字符串是什么?有没有办法获得原始结构?

模型

type Party struct {
  Name string `datastore:"name"`
  Permissions string `datastore:"permissions"`
}

type PartyPermission struct {
  isAdmin bool
  canInviteOrganizers bool
  canInviteAssistants bool
  canEditParty bool
  showOnMessages bool
  roleName string
}

Java

@Entity
public class Party implements Cloneable, Serializable {

    @Id
    private Long id;

    private String name;

    private Map<String, PartyPermission> permissions;

    // constructor ...

    // getters, setters, etc
}

public class PartyPermission implements Serializable {

    private static final long serialVersionUID = 3019266092062869643L;

    private boolean isAdmin;

    private boolean canInviteOrganizers;

    private boolean canInviteAssistants;

    private boolean canEditEvent;

    private boolean showsOnMessages;

    private String roleName;

    // constructor

    // getters, setters, etc

}

我的尝试

我在星期一 10 开始使用 go,但我不知道那个字符串可能是什么。我认为也许该字符串是一个接口,我可以将该字符串转换为一个接口,然后转换为我真正想要的,map[string]PartyPermission。所以,反思:

func (p *Party) GetPermissions() (map[string]PartyPermission) {

  iPermissions := reflect.ValueOf(p.Permissions).Interface()

  return iPermissions.(map[string]PartyPermission)  
}

编译得很好,但是 Go 说这个字符串不能转换成另一个东西。比如:

interface conversion: interface is string, not map[string]packName.PartyPermission

感谢您的宝贵时间。

【问题讨论】:

    标签: google-app-engine go interface google-cloud-datastore


    【解决方案1】:

    你不能,你必须为该格式创建一个解码器。

    你可以使用 json 什么的。

    【讨论】:

    • 嗯,我认为你是对的。您知道如何访问原始存储数据吗?在谷歌开发者控制台中,在数据存储区,显示的权限值为:{"properties":{"5127067817476096":{"entityValue":{"properties":{"canInviteAssistants":{"booleanValue":true," indexed":false},"showsOnMessages":{"booleanValue":true,"indexed":false},"canInviteOrganizers":........ ........ 我正在寻找方法这样做。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多