将字符串数据转换为结构:在 Java AppEngine (Objectify) 上插入,在 Go AppEngine 上读取
Convert string data to struct: Inserted on Java AppEngine (Objectify), readed on Go AppEngine
简介
你好,我正在 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 开始使用 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
谢谢你的时间。
你不能,你必须为该格式创建一个解码器。
你可以使用 json 或其他东西。
简介
你好,我正在 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 开始使用 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
谢谢你的时间。
你不能,你必须为该格式创建一个解码器。
你可以使用 json 或其他东西。