本文整理汇总了Golang中reflect.Value.Ptr方法的典型用法代码示例。如果您正苦于以下问题:Golang Value.Ptr方法的具体用法?Golang Value.Ptr怎么用?Golang Value.Ptr使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类reflect.Value
的用法示例。
在下文中一共展示了Value.Ptr方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: decode
//.........这里部分代码省略.........
}
case reflect.Slice:
// check nil
bt, e = t.buf.ReadByte()
if e != nil || bt == 0 {
return
}
// get length
part, e = t.buf.ReadNext(WORD32)
if e != nil {
return
}
ln := int(Pack.Uint32(part))
if val.Type().Elem().Kind() == reflect.Uint8 {
part, e = t.buf.ReadNext(ln)
if e != nil {
return
}
*(*[]byte)(val.Ptr()) = part
} else {
if val.IsNil() || val.Cap() < ln {
val.Set(reflect.MakeSlice(val.Type(), ln, ln))
} else {
val.SetLen(ln)
}
for i := 0; i < ln; i++ {
e = t.decode(val.Index(i))
if e != nil {
return
}
}
}
case reflect.Ptr:
bt, e = t.buf.ReadByte()
if e != nil {
return
}
// if nil
if bt == 0 {
val.Set(reflect.Zero(val.Type()))
return
}
// interface
if val.Elem().Kind() == reflect.Invalid {
val.Set(reflect.New(val.Type().Elem()))
}
val = val.Elem()
e = t.decode(val)
case reflect.Struct:
vType := val.Type()
if vType == TimeType {
part, e = t.buf.ReadNext(WORD64)
if e != nil {
return
}
val.Set(reflect.ValueOf(Time(part)))
} else {
ln := val.NumField()
for i := 0; i < ln; i++ {
if vType.Field(i).PkgPath != "" {
continue
}
e = t.decode(val.Field(i))
if e != nil {