Package abi

import "internal/abi"
Overview
Index

Overview ▾

Index ▾

Constants
func CommonSize(ptrSize int) int
func FuncPCABI0(f interface{}) uintptr
func FuncPCABIInternal(f interface{}) uintptr
func StructFieldSize(ptrSize int) int
func TFlagOff(ptrSize int) int
func UncommonSize() uint64
func UseInterfaceSwitchCache(goarch string) bool
type ArrayType
type ChanDir
type ChanType
type FuncFlag
type FuncID
type FuncType
    func (t *FuncType) In(i int) *Type
    func (t *FuncType) InSlice() []*Type
    func (t *FuncType) IsVariadic() bool
    func (t *FuncType) NumIn() int
    func (t *FuncType) NumOut() int
    func (t *FuncType) Out(i int) *Type
    func (t *FuncType) OutSlice() []*Type
type Imethod
type IntArgRegBitmap
    func (b *IntArgRegBitmap) Get(i int) bool
    func (b *IntArgRegBitmap) Set(i int)
type InterfaceSwitch
type InterfaceSwitchCache
type InterfaceSwitchCacheEntry
type InterfaceType
    func (t *InterfaceType) NumMethod() int
type Kind
    func (k Kind) String() string
type MapType
    func (mt *MapType) HashMightPanic() bool
    func (mt *MapType) IndirectElem() bool
    func (mt *MapType) IndirectKey() bool
    func (mt *MapType) NeedKeyUpdate() bool
    func (mt *MapType) ReflexiveKey() bool
type Method
type Name
    func NewName(n, tag string, exported, embedded bool) Name
    func (n Name) Data(off int) *byte
    func (n Name) DataChecked(off int, whySafe string) *byte
    func (n Name) HasTag() bool
    func (n Name) IsBlank() bool
    func (n Name) IsEmbedded() bool
    func (n Name) IsExported() bool
    func (n Name) Name() string
    func (n Name) ReadVarint(off int) (int, int)
    func (n Name) Tag() string
type NameOff
type PtrType
type RegArgs
    func (r *RegArgs) Dump()
    func (r *RegArgs) IntRegArgAddr(reg int, argSize uintptr) unsafe.Pointer
type SliceType
type StructField
    func (f *StructField) Embedded() bool
type StructType
type TFlag
type TextOff
type Type
    func (t *Type) Align() int
    func (t *Type) ArrayType() *ArrayType
    func (t *Type) ChanDir() ChanDir
    func (t *Type) Common() *Type
    func (t *Type) Elem() *Type
    func (t *Type) ExportedMethods() []Method
    func (t *Type) FieldAlign() int
    func (t *Type) FuncType() *FuncType
    func (t *Type) GcSlice(begin, end uintptr) []byte
    func (t *Type) HasName() bool
    func (t *Type) IfaceIndir() bool
    func (t *Type) InterfaceType() *InterfaceType
    func (t *Type) IsDirectIface() bool
    func (t *Type) Key() *Type
    func (t *Type) Kind() Kind
    func (t *Type) Len() int
    func (t *Type) MapType() *MapType
    func (t *Type) NumMethod() int
    func (t *Type) Pointers() bool
    func (t *Type) Size() uintptr
    func (t *Type) StructType() *StructType
    func (t *Type) Uncommon() *UncommonType
type TypeAssert
type TypeAssertCache
type TypeAssertCacheEntry
type TypeOff
type UncommonType
    func (t *UncommonType) ExportedMethods() []Method
    func (t *UncommonType) Methods() []Method

Package files

abi.go abi_amd64.go compiletype.go funcpc.go map.go stack.go switch.go symtab.go type.go

Constants

const (

    // RAX, RBX, RCX, RDI, RSI, R8, R9, R10, R11.
    IntArgRegs = 9

    // X0 -> X14.
    FloatArgRegs = 15

    // We use SSE2 registers which support 64-bit float operations.
    EffectiveFloatRegSize = 8
)

Map constants common to several packages runtime/runtime-gdb.py:MapTypePrinter contains its own copy

const (
    MapBucketCountBits = 3 // log2 of number of elements in a bucket.
    MapBucketCount     = 1 << MapBucketCountBits
    MapMaxKeyBytes     = 128 // Must fit in a uint8.
    MapMaxElemBytes    = 128 // Must fit in a uint8.
)
const (
    // StackNosplitBase is the base maximum number of bytes that a chain of
    // NOSPLIT functions can use.
    //
    // This value must be multiplied by the stack guard multiplier, so do not
    // use it directly. See runtime/stack.go:stackNosplit and
    // cmd/internal/objabi/stack.go:StackNosplit.
    StackNosplitBase = 800

    // After a stack split check the SP is allowed to be StackSmall bytes below
    // the stack guard.
    //
    // Functions that need frames <= StackSmall can perform the stack check
    // using a single comparison directly between the stack guard and the SP
    // because we ensure that StackSmall bytes of stack space are available
    // beyond the stack guard.
    StackSmall = 128

    // Functions that need frames <= StackBig can assume that neither
    // SP-framesize nor stackGuard-StackSmall will underflow, and thus use a
    // more efficient check. In order to ensure this, StackBig must be <= the
    // size of the unmapped space at zero.
    StackBig = 4096
)

IDs for PCDATA and FUNCDATA tables in Go binaries.

These must agree with ../../../runtime/funcdata.h.

const (
    PCDATA_UnsafePoint   = 0
    PCDATA_StackMapIndex = 1
    PCDATA_InlTreeIndex  = 2
    PCDATA_ArgLiveIndex  = 3

    FUNCDATA_ArgsPointerMaps    = 0
    FUNCDATA_LocalsPointerMaps  = 1
    FUNCDATA_StackObjects       = 2
    FUNCDATA_InlTree            = 3
    FUNCDATA_OpenCodedDeferInfo = 4
    FUNCDATA_ArgInfo            = 5
    FUNCDATA_ArgLiveInfo        = 6
    FUNCDATA_WrapInfo           = 7
)

Special values for the PCDATA_UnsafePoint table.

const (
    UnsafePointSafe   = -1 // Safe for async preemption
    UnsafePointUnsafe = -2 // Unsafe for async preemption

    // UnsafePointRestart1(2) apply on a sequence of instructions, within
    // which if an async preemption happens, we should back off the PC
    // to the start of the sequence when resuming.
    // We need two so we can distinguish the start/end of the sequence
    // in case that two sequences are next to each other.
    UnsafePointRestart1 = -3
    UnsafePointRestart2 = -4

    // Like UnsafePointRestart1, but back to function entry if async preempted.
    UnsafePointRestartAtEntry = -5
)
const (
    // TODO (khr, drchase) why aren't these in TFlag?  Investigate, fix if possible.
    KindDirectIface = 1 << 5
    KindGCProg      = 1 << 6 // Type.gc points to GC program
    KindMask        = (1 << 5) - 1
)

ArgsSizeUnknown is set in Func.argsize to mark all functions whose argument size is unknown (C vararg functions, and assembly code without an explicit specification). This value is generated by the compiler, assembler, or linker.

const ArgsSizeUnknown = -0x80000000

ZeroValSize is the size in bytes of runtime.zeroVal.

const ZeroValSize = 1024

func CommonSize

func CommonSize(ptrSize int) int

CommonSize returns sizeof(Type) for a compilation target with a given ptrSize

func FuncPCABI0

func FuncPCABI0(f interface{}) uintptr

FuncPCABI0 returns the entry PC of the function f, which must be a direct reference of a function defined as ABI0. Otherwise it is a compile-time error.

Implemented as a compile intrinsic.

func FuncPCABIInternal

func FuncPCABIInternal(f interface{}) uintptr

FuncPCABIInternal returns the entry PC of the function f. If f is a direct reference of a function, it must be defined as ABIInternal. Otherwise it is a compile-time error. If f is not a direct reference of a defined function, it assumes that f is a func value. Otherwise the behavior is undefined.

Implemented as a compile intrinsic.

func StructFieldSize

func StructFieldSize(ptrSize int) int

StructFieldSize returns sizeof(StructField) for a compilation target with a given ptrSize

func TFlagOff

func TFlagOff(ptrSize int) int

TFlagOff returns the offset of Type.TFlag for a compilation target with a given ptrSize

func UncommonSize

func UncommonSize() uint64

UncommonSize returns sizeof(UncommonType). This currently does not depend on ptrSize. This exported function is in an internal package, so it may change to depend on ptrSize in the future.

func UseInterfaceSwitchCache

func UseInterfaceSwitchCache(goarch string) bool

type ArrayType

ArrayType represents a fixed array type.

type ArrayType struct {
    Type
    Elem  *Type // array element type
    Slice *Type // slice type
    Len   uintptr
}

type ChanDir

type ChanDir int
const (
    RecvDir    ChanDir = 1 << iota         // <-chan
    SendDir                                // chan<-
    BothDir            = RecvDir | SendDir // chan
    InvalidDir ChanDir = 0
)

type ChanType

ChanType represents a channel type

type ChanType struct {
    Type
    Elem *Type
    Dir  ChanDir
}

type FuncFlag

A FuncFlag records bits about a function, passed to the runtime.

type FuncFlag uint8
const (
    // FuncFlagTopFrame indicates a function that appears at the top of its stack.
    // The traceback routine stop at such a function and consider that a
    // successful, complete traversal of the stack.
    // Examples of TopFrame functions include goexit, which appears
    // at the top of a user goroutine stack, and mstart, which appears
    // at the top of a system goroutine stack.
    FuncFlagTopFrame FuncFlag = 1 << iota

    // FuncFlagSPWrite indicates a function that writes an arbitrary value to SP
    // (any write other than adding or subtracting a constant amount).
    // The traceback routines cannot encode such changes into the
    // pcsp tables, so the function traceback cannot safely unwind past
    // SPWrite functions. Stopping at an SPWrite function is considered
    // to be an incomplete unwinding of the stack. In certain contexts
    // (in particular garbage collector stack scans) that is a fatal error.
    FuncFlagSPWrite

    // FuncFlagAsm indicates that a function was implemented in assembly.
    FuncFlagAsm
)

type FuncID

A FuncID identifies particular functions that need to be treated specially by the runtime. Note that in some situations involving plugins, there may be multiple copies of a particular special runtime function.

type FuncID uint8
const (
    FuncIDNormal FuncID = iota // not a special function
    FuncID_abort
    FuncID_asmcgocall
    FuncID_asyncPreempt
    FuncID_cgocallback
    FuncID_corostart
    FuncID_debugCallV2
    FuncID_gcBgMarkWorker
    FuncID_goexit
    FuncID_gogo
    FuncID_gopanic
    FuncID_handleAsyncEvent
    FuncID_mcall
    FuncID_morestack
    FuncID_mstart
    FuncID_panicwrap
    FuncID_rt0_go
    FuncID_runfinq
    FuncID_runtime_main
    FuncID_sigpanic
    FuncID_systemstack
    FuncID_systemstack_switch
    FuncIDWrapper // any autogenerated code (hash/eq algorithms, method wrappers, etc.)
)

type FuncType

funcType represents a function type.

A *Type for each in and out parameter is stored in an array that directly follows the funcType (and possibly its uncommonType). So a function type with one method, one input, and one output is:

struct {
	funcType
	uncommonType
	[2]*rtype    // [0] is in, [1] is out
}
type FuncType struct {
    Type
    InCount  uint16
    OutCount uint16 // top bit is set if last input parameter is ...
}

func (*FuncType) In

func (t *FuncType) In(i int) *Type

func (*FuncType) InSlice

func (t *FuncType) InSlice() []*Type

func (*FuncType) IsVariadic

func (t *FuncType) IsVariadic() bool

func (*FuncType) NumIn

func (t *FuncType) NumIn() int

func (*FuncType) NumOut

func (t *FuncType) NumOut() int

func (*FuncType) Out

func (t *FuncType) Out(i int) *Type

func (*FuncType) OutSlice

func (t *FuncType) OutSlice() []*Type

type Imethod

Imethod represents a method on an interface type

type Imethod struct {
    Name NameOff // name of method
    Typ  TypeOff // .(*FuncType) underneath
}

type IntArgRegBitmap

IntArgRegBitmap is a bitmap large enough to hold one bit per integer argument/return register.

type IntArgRegBitmap [(IntArgRegs + 7) / 8]uint8

func (*IntArgRegBitmap) Get

func (b *IntArgRegBitmap) Get(i int) bool

Get returns whether the i'th bit of the bitmap is set.

nosplit because it's called in extremely sensitive contexts, like on the reflectcall return path.

func (*IntArgRegBitmap) Set

func (b *IntArgRegBitmap) Set(i int)

Set sets the i'th bit of the bitmap to 1.

type InterfaceSwitch

type InterfaceSwitch struct {
    Cache  *InterfaceSwitchCache
    NCases int

    // Array of NCases elements.
    // Each case must be a non-empty interface type.
    Cases [1]*InterfaceType
}

type InterfaceSwitchCache

type InterfaceSwitchCache struct {
    Mask    uintptr                      // mask for index. Must be a power of 2 minus 1
    Entries [1]InterfaceSwitchCacheEntry // Mask+1 entries total
}

type InterfaceSwitchCacheEntry

type InterfaceSwitchCacheEntry struct {
    // type of source value (a *Type)
    Typ uintptr
    // case # to dispatch to
    Case int
    // itab to use for resulting case variable (a *runtime.itab)
    Itab uintptr
}

type InterfaceType

type InterfaceType struct {
    Type
    PkgPath Name      // import path
    Methods []Imethod // sorted by hash
}

func (*InterfaceType) NumMethod

func (t *InterfaceType) NumMethod() int

NumMethod returns the number of interface methods in the type's method set.

type Kind

A Kind represents the specific kind of type that a Type represents. The zero Kind is not a valid kind.

type Kind uint
const (
    Invalid Kind = iota
    Bool
    Int
    Int8
    Int16
    Int32
    Int64
    Uint
    Uint8
    Uint16
    Uint32
    Uint64
    Uintptr
    Float32
    Float64
    Complex64
    Complex128
    Array
    Chan
    Func
    Interface
    Map
    Pointer
    Slice
    String
    Struct
    UnsafePointer
)

func (Kind) String

func (k Kind) String() string

String returns the name of k.

type MapType

type MapType struct {
    Type
    Key    *Type
    Elem   *Type
    Bucket *Type // internal type representing a hash bucket
    // function for hashing keys (ptr to key, seed) -> hash
    Hasher     func(unsafe.Pointer, uintptr) uintptr
    KeySize    uint8  // size of key slot
    ValueSize  uint8  // size of elem slot
    BucketSize uint16 // size of bucket
    Flags      uint32
}

func (*MapType) HashMightPanic

func (mt *MapType) HashMightPanic() bool

func (*MapType) IndirectElem

func (mt *MapType) IndirectElem() bool

func (*MapType) IndirectKey

func (mt *MapType) IndirectKey() bool

Note: flag values must match those used in the TMAP case in ../cmd/compile/internal/reflectdata/reflect.go:writeType.

func (*MapType) NeedKeyUpdate

func (mt *MapType) NeedKeyUpdate() bool

func (*MapType) ReflexiveKey

func (mt *MapType) ReflexiveKey() bool

type Method

Method on non-interface type

type Method struct {
    Name NameOff // name of method
    Mtyp TypeOff // method type (without receiver)
    Ifn  TextOff // fn used in interface call (one-word receiver)
    Tfn  TextOff // fn used for normal method call
}

type Name

type Name struct {
    Bytes *byte
}

func NewName

func NewName(n, tag string, exported, embedded bool) Name

func (Name) Data

func (n Name) Data(off int) *byte

Data does pointer arithmetic on n's Bytes, and that arithmetic is asserted to be safe because the runtime made the call (other packages use DataChecked)

func (Name) DataChecked

func (n Name) DataChecked(off int, whySafe string) *byte

DataChecked does pointer arithmetic on n's Bytes, and that arithmetic is asserted to be safe for the reason in whySafe (which can appear in a backtrace, etc.)

func (Name) HasTag

func (n Name) HasTag() bool

HasTag returns true iff there is tag data following this name

func (Name) IsBlank

func (n Name) IsBlank() bool

IsBlank indicates whether n is "_".

func (Name) IsEmbedded

func (n Name) IsEmbedded() bool

IsEmbedded returns true iff n is embedded (an anonymous field).

func (Name) IsExported

func (n Name) IsExported() bool

IsExported returns "is n exported?"

func (Name) Name

func (n Name) Name() string

Name returns the tag string for n, or empty if there is none.

func (Name) ReadVarint

func (n Name) ReadVarint(off int) (int, int)

ReadVarint parses a varint as encoded by encoding/binary. It returns the number of encoded bytes and the encoded value.

func (Name) Tag

func (n Name) Tag() string

Tag returns the tag string for n, or empty if there is none.

type NameOff

NameOff is the offset to a name from moduledata.types. See resolveNameOff in runtime.

type NameOff int32

type PtrType

type PtrType struct {
    Type
    Elem *Type // pointer element (pointed at) type
}

type RegArgs

RegArgs is a struct that has space for each argument and return value register on the current architecture.

Assembly code knows the layout of the first two fields of RegArgs.

RegArgs also contains additional space to hold pointers when it may not be safe to keep them only in the integer register space otherwise.

type RegArgs struct {
    // Values in these slots should be precisely the bit-by-bit
    // representation of how they would appear in a register.
    //
    // This means that on big endian arches, integer values should
    // be in the top bits of the slot. Floats are usually just
    // directly represented, but some architectures treat narrow
    // width floating point values specially (e.g. they're promoted
    // first, or they need to be NaN-boxed).
    Ints   [IntArgRegs]uintptr  // untyped integer registers
    Floats [FloatArgRegs]uint64 // untyped float registers

    // Ptrs is a space that duplicates Ints but with pointer type,
    // used to make pointers passed or returned  in registers
    // visible to the GC by making the type unsafe.Pointer.
    Ptrs [IntArgRegs]unsafe.Pointer

    // ReturnIsPtr is a bitmap that indicates which registers
    // contain or will contain pointers on the return path from
    // a reflectcall. The i'th bit indicates whether the i'th
    // register contains or will contain a valid Go pointer.
    ReturnIsPtr IntArgRegBitmap
}

func (*RegArgs) Dump

func (r *RegArgs) Dump()

func (*RegArgs) IntRegArgAddr

func (r *RegArgs) IntRegArgAddr(reg int, argSize uintptr) unsafe.Pointer

IntRegArgAddr returns a pointer inside of r.Ints[reg] that is appropriately offset for an argument of size argSize.

argSize must be non-zero, fit in a register, and a power-of-two.

This method is a helper for dealing with the endianness of different CPU architectures, since sub-word-sized arguments in big endian architectures need to be "aligned" to the upper edge of the register to be interpreted by the CPU correctly.

type SliceType

type SliceType struct {
    Type
    Elem *Type // slice element type
}

type StructField

type StructField struct {
    Name   Name    // name is always non-empty
    Typ    *Type   // type of field
    Offset uintptr // byte offset of field
}

func (*StructField) Embedded

func (f *StructField) Embedded() bool

type StructType

type StructType struct {
    Type
    PkgPath Name
    Fields  []StructField
}

type TFlag

TFlag is used by a Type to signal what extra type information is available in the memory directly following the Type value.

type TFlag uint8
const (
    // TFlagUncommon means that there is a data with a type, UncommonType,
    // just beyond the shared-per-type common data.  That is, the data
    // for struct types will store their UncommonType at one offset, the
    // data for interface types will store their UncommonType at a different
    // offset.  UncommonType is always accessed via a pointer that is computed
    // using trust-us-we-are-the-implementors pointer arithmetic.
    //
    // For example, if t.Kind() == Struct and t.tflag&TFlagUncommon != 0,
    // then t has UncommonType data and it can be accessed as:
    //
    //	type structTypeUncommon struct {
    //		structType
    //		u UncommonType
    //	}
    //	u := &(*structTypeUncommon)(unsafe.Pointer(t)).u
    TFlagUncommon TFlag = 1 << 0

    // TFlagExtraStar means the name in the str field has an
    // extraneous '*' prefix. This is because for most types T in
    // a program, the type *T also exists and reusing the str data
    // saves binary size.
    TFlagExtraStar TFlag = 1 << 1

    // TFlagNamed means the type has a name.
    TFlagNamed TFlag = 1 << 2

    // TFlagRegularMemory means that equal and hash functions can treat
    // this type as a single region of t.size bytes.
    TFlagRegularMemory TFlag = 1 << 3

    // TFlagUnrolledBitmap marks special types that are unrolled-bitmap
    // versions of types with GC programs.
    // These types need to be deallocated when the underlying object
    // is freed.
    TFlagUnrolledBitmap TFlag = 1 << 4
)

type TextOff

TextOff is an offset from the top of a text section. See (rtype).textOff in runtime.

type TextOff int32

type Type

Type is the runtime representation of a Go type.

Be careful about accessing this type at build time, as the version of this type in the compiler/linker may not have the same layout as the version in the target binary, due to pointer width differences and any experiments. Use cmd/compile/internal/rttype or the functions in compiletype.go to access this type instead. (TODO: this admonition applies to every type in this package. Put it in some shared location?)

type Type struct {
    Size_       uintptr
    PtrBytes    uintptr // number of (prefix) bytes in the type that can contain pointers
    Hash        uint32  // hash of type; avoids computation in hash tables
    TFlag       TFlag   // extra type information flags
    Align_      uint8   // alignment of variable with this type
    FieldAlign_ uint8   // alignment of struct field with this type
    Kind_       uint8   // enumeration for C
    // function for comparing objects of this type
    // (ptr to object A, ptr to object B) -> ==?
    Equal func(unsafe.Pointer, unsafe.Pointer) bool
    // GCData stores the GC type data for the garbage collector.
    // If the KindGCProg bit is set in kind, GCData is a GC program.
    // Otherwise it is a ptrmask bitmap. See mbitmap.go for details.
    GCData    *byte
    Str       NameOff // string form
    PtrToThis TypeOff // type for pointer to this type, may be zero
}

func (*Type) Align

func (t *Type) Align() int

Align returns the alignment of data with type t.

func (*Type) ArrayType

func (t *Type) ArrayType() *ArrayType

ArrayType returns t cast to a *ArrayType, or nil if its tag does not match.

func (*Type) ChanDir

func (t *Type) ChanDir() ChanDir

ChanDir returns the direction of t if t is a channel type, otherwise InvalidDir (0).

func (*Type) Common

func (t *Type) Common() *Type

func (*Type) Elem

func (t *Type) Elem() *Type

Elem returns the element type for t if t is an array, channel, map, pointer, or slice, otherwise nil.

func (*Type) ExportedMethods

func (t *Type) ExportedMethods() []Method

func (*Type) FieldAlign

func (t *Type) FieldAlign() int

func (*Type) FuncType

func (t *Type) FuncType() *FuncType

FuncType returns t cast to a *FuncType, or nil if its tag does not match.

func (*Type) GcSlice

func (t *Type) GcSlice(begin, end uintptr) []byte

func (*Type) HasName

func (t *Type) HasName() bool

func (*Type) IfaceIndir

func (t *Type) IfaceIndir() bool

IfaceIndir reports whether t is stored indirectly in an interface value.

func (*Type) InterfaceType

func (t *Type) InterfaceType() *InterfaceType

InterfaceType returns t cast to a *InterfaceType, or nil if its tag does not match.

func (*Type) IsDirectIface

func (t *Type) IsDirectIface() bool

isDirectIface reports whether t is stored directly in an interface value.

func (*Type) Key

func (t *Type) Key() *Type

func (*Type) Kind

func (t *Type) Kind() Kind

func (*Type) Len

func (t *Type) Len() int

Len returns the length of t if t is an array type, otherwise 0

func (*Type) MapType

func (t *Type) MapType() *MapType

MapType returns t cast to a *MapType, or nil if its tag does not match.

func (*Type) NumMethod

func (t *Type) NumMethod() int

func (*Type) Pointers

func (t *Type) Pointers() bool

func (*Type) Size

func (t *Type) Size() uintptr

Size returns the size of data with type t.

func (*Type) StructType

func (t *Type) StructType() *StructType

StructType returns t cast to a *StructType, or nil if its tag does not match.

func (*Type) Uncommon

func (t *Type) Uncommon() *UncommonType

Uncommon returns a pointer to T's "uncommon" data if there is any, otherwise nil

type TypeAssert

type TypeAssert struct {
    Cache   *TypeAssertCache
    Inter   *InterfaceType
    CanFail bool
}

type TypeAssertCache

type TypeAssertCache struct {
    Mask    uintptr
    Entries [1]TypeAssertCacheEntry
}

type TypeAssertCacheEntry

type TypeAssertCacheEntry struct {
    // type of source value (a *runtime._type)
    Typ uintptr
    // itab to use for result (a *runtime.itab)
    // nil if CanFail is set and conversion would fail.
    Itab uintptr
}

type TypeOff

TypeOff is the offset to a type from moduledata.types. See resolveTypeOff in runtime.

type TypeOff int32

type UncommonType

UncommonType is present only for defined types or types with methods (if T is a defined type, the uncommonTypes for T and *T have methods). Using a pointer to this struct reduces the overall size required to describe a non-defined type with no methods.

type UncommonType struct {
    PkgPath NameOff // import path; empty for built-in types like int, string
    Mcount  uint16  // number of methods
    Xcount  uint16  // number of exported methods
    Moff    uint32  // offset from this uncommontype to [mcount]Method
    // contains filtered or unexported fields
}

func (*UncommonType) ExportedMethods

func (t *UncommonType) ExportedMethods() []Method

func (*UncommonType) Methods

func (t *UncommonType) Methods() []Method