用go的指针将struct相互转换[]byte乱码,请问这是什么原因,应该如何解决?

Rebirth
  • 2
新手上路,请多包涵

本地缓存用的是freecache
用go的指针将struct转成[]byte存储到本地缓存中再取出来的时候会出现转成的结构体乱码的问题
做得是web端的项目,在本地单次请求的时候不会出现转出来的数据乱码的情况,但用jmeter测试时会出现问题。

func GetUserinfo(userid string, opts *config.Options) (*Userinfo, error) {
    key := []byte(fmt.Sprintf(UserInfoCacheKey, userid))
    out := &Userinfo{}
    userinfo, err := config.Cache.Get(key)
    if err != nil {
        if err := sdk.Invoke(opts.BizUserProfileAppID, "get_user_info", struct {
            Prod   string `json:"prod"`
            Userid string `json:"user_id"`
        }{opts.Prod, userid}, out); err != nil {
            return nil, err
        }
        size := unsafe.Sizeof(*out)
        sliceHeader := reflect.SliceHeader{
            Data: uintptr(unsafe.Pointer(out)),
            Len:  int(size),
            Cap:  int(size),
        }
        bytes := *(*[]byte)(unsafe.Pointer(&sliceHeader))
        err := config.Cache.Set(key, bytes, 120)
        if err != nil {
            log.Println("设置缓存失败:", err)
        }
        return out, nil
    } else {
        out = *(**Userinfo)(unsafe.Pointer(&userinfo))
        fmt.Printf("%d userinfo: %+v\n", a, out)
        return out, nil
    }
}
回复
阅读 291
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏