代码之家  ›  专栏  ›  技术社区  ›  irfani arief

获取不带指针的结构标记

  •  1
  • irfani arief  · 技术社区  · 8 年前

    here

    封送拆收器的功能与我现在预期的一样,尽管仍然缺少一些功能。我陷入的是封送函数。

    func Marshal(obj interface{}) (str string, err error) {
    ...
        elemsType := reflect.TypeOf(obj).Elem()
    

    如您所见,我试图模拟json包的封送签名。唯一的问题是,当我试图将值传递给封送处理函数时 reflect.TypeOf

    这很有效

    user := User{"johnjohnjohn", "the", "doe", "smart", 26}
    res, err := Marshal(&user)
    

    这不是

    user := User{"johnjohnjohn", "the", "doe", "smart", 26}
    res, err := Marshal(user)
    

    1 回复  |  直到 6 年前
        1
  •  6
  •   icza    8 年前

    如果你想让它在价值观上发挥作用,不要打电话 Type.Elem() 关于反射类型。要同时处理(指针和非指针),请检查它是否为指针类型,然后才调用 :

    elemsType := reflect.TypeOf(obj)
    if elemsType.Kind() == reflect.Ptr {
        elemsType = elemsType.Elem()
    }