将字符串数据转换为struct:在Java AppEngine(Objectify)上插入,在Go AppEngine上重写

时间:2015-08-19 21:50:00

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

简介

您好,我在Go AppEngine上做了一个模块,我在阅读一些内嵌嵌套模型的模型时遇到了问题。模型是Party,我想要的是Permissions。但是,当我从数据存储区获得Party时,权限结构字段的类型为字符串。

//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开始,我不知道那个字符串是什么。我想也许那个字符串是一个接口,我可以将该字符串转换为接口,然后转换到我真正希望的地图[map] 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

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您不能为该格式创建解码器。

你可以使用json或其他东西。