本文整理汇总了Golang中v/io/v23/vdl.Type.IsBytes方法的典型用法代码示例。如果您正苦于以下问题:Golang Type.IsBytes方法的具体用法?Golang Type.IsBytes怎么用?Golang Type.IsBytes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类v/io/v23/vdl.Type
的用法示例。
在下文中一共展示了Type.IsBytes方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: fromZero
func (t target) fromZero(tt *vdl.Type) error {
if tt.IsBytes() {
return t.FromBytes(nil, tt)
}
switch tt.Kind() {
case vdl.Optional:
elemType := tt.Elem()
switch elemType.Kind() {
case vdl.Union, vdl.Struct: // Array? String? Bytes? List? Set?
// Note: for union, this zeros 16 bytes, but for others it does just 8.
zeroBytes(t.current.Bytes())
default:
panic(fmt.Sprintf("Vdl type %v cannot be optional", tt))
}
case vdl.Any:
panic("Any rep not yet determined")
case vdl.Bool:
return t.FromBool(false, tt)
case vdl.Byte, vdl.Uint16, vdl.Uint32, vdl.Uint64:
return t.FromUint(0, tt)
case vdl.Int8, vdl.Int16, vdl.Int32, vdl.Int64:
return t.FromInt(0, tt)
case vdl.Float32, vdl.Float64:
return t.FromFloat(0, tt)
case vdl.String:
return t.FromString("", tt)
case vdl.Enum:
return t.FromEnumLabel(tt.EnumLabel(0), tt)
case vdl.TypeObject:
return t.FromTypeObject(vdl.AnyType)
case vdl.List:
lt, err := t.StartList(tt, 0)
if err != nil {
return err
}
return t.FinishList(lt)
case vdl.Array:
lt, err := t.StartList(tt, tt.Len())
if err != nil {
return err
}
for i := 0; i < tt.Len(); i++ {
targ, err := lt.StartElem(i)
if err != nil {
return err
}
if err := targ.(target).fromZero(tt.Elem()); err != nil {
return err
}
if err := lt.FinishElem(targ); err != nil {
return err
}
}
return t.FinishList(lt)
case vdl.Map:
mt, err := t.StartMap(tt, 0)
if err != nil {
return err
}
return t.FinishMap(mt)
case vdl.Set:
st, err := t.StartSet(tt, 0)
if err != nil {
return err
}
return t.FinishSet(st)
case vdl.Struct:
st, err := t.StartFields(tt)
if err != nil {
return err
}
for i := 0; i < tt.NumField(); i++ {
fld := tt.Field(i)
kt, ft, err := st.StartField(fld.Name)
if err != nil {
return err
}
if err := ft.(target).fromZero(fld.Type); err != nil {
return err
}
if err := st.FinishField(kt, ft); err != nil {
return err
}
}
return t.FinishFields(st)
case vdl.Union:
st, err := t.StartFields(tt)
if err != nil {
return err
}
fld := tt.Field(0)
kt, ft, err := st.StartField(fld.Name)
if err != nil {
return err
}
if err := ft.(target).fromZero(fld.Type); err != nil {
return err
}
if err := st.FinishField(kt, ft); err != nil {
return err
//.........这里部分代码省略.........
示例2: transcodeValue
//.........这里部分代码省略.........
switch ptr, err := mtv.modec.ReadPointer(); {
case err != nil:
return err
case ptr == 0:
return fmt.Errorf("invalid null string pointer")
default:
value, err := mtv.modec.ReadString()
if err != nil {
return err
}
return target.FromString(value, vt)
}
return nil
case vdl.Enum:
index, err := mtv.modec.ReadInt32()
if err != nil {
return err
}
if int(index) >= vt.NumEnumLabel() || index < 0 {
return fmt.Errorf("enum label out of range")
}
target.FromEnumLabel(vt.EnumLabel(int(index)), vt)
return nil
case vdl.Array, vdl.List:
switch ptr, err := mtv.modec.ReadPointer(); {
case err != nil:
return err
case ptr == 0 && isNullable:
return target.FromNil(vdl.OptionalType(vt))
case ptr == 0 && !isNullable:
return fmt.Errorf("invalid null struct pointer")
}
if vt.IsBytes() {
str, err := mtv.modec.ReadString()
if err != nil {
return err
}
return target.FromBytes([]byte(str), vt)
} else {
elemBitSize := baseTypeSizeBits(vt.Elem())
numElems, err := mtv.modec.StartArray(elemBitSize)
if err != nil {
return err
}
listTarget, err := target.StartList(vt, int(numElems))
if err != nil {
return err
}
for i := 0; i < int(numElems); i++ {
elemTarget, err := listTarget.StartElem(i)
if err != nil {
return err
}
if err := mtv.transcodeValue(vt.Elem(), elemTarget, false, false); err != nil {
return err
}
if err := listTarget.FinishElem(elemTarget); err != nil {
return err
}
}
if err := target.FinishList(listTarget); err != nil {
return err
}
}
return mtv.modec.Finish()