import "reflect"

reflectパッケージは、どんな型のオブジェクトでもプログラムから操作可能なランタイムリフレクションを実装しています。典型的な使い方としては、interface{}から静的な型の値を取得したり、Typeof関数を呼び出して動的な型情報を得たりします。このTypeof関数は、インタフェース型であるType型のオブジェクトを返します。これは構造体へのポインタ*StructTypeや、*IntTypeなどのように実際の型についての詳細を表しており、これを型スイッチや、型アサーションを使って調べます。

NewValue関数を呼び出すとランタイムデータを表すValueが作成されます。このランタイムデータには*StructValue、*IntValueなどが含まれます。またMakeZero関数はTypeをパラメータに取り、その型のゼロ値を表すValueを返します。

パッケージファイル

deepequal.go type.go value.go

ArrayCopy関数

func ArrayCopy(dst, src ArrayOrSliceValue) int

ArrayCopyは、srcの内容をdstにコピーします。コピーはdstが一杯になるか、srcのデータがなくなるまで行われます。この関数はコピーした要素数を返します。dstとsrcの要素型は同じでなければなりません。

DeepEqual関数

func DeepEqual(a1, a2 interface{}) bool

DeepEqualは、内容を含めて等価であるか検査します。可能なときは通常の==(イコール)を使いますが、配列やスライスのメンバ、構造体のフィールドを正確かつ再帰的に調べます。

ArrayOrSliceType型

ArrayOrSliceTypeは、ArrayTypeとSliceTypeを両方実装した共通インタフェースです。

type ArrayOrSliceType interface {
    Type
    Elem() Type
}

ArrayOrSliceValue型

ArrayOrSliceValueは、ArrayValueとSliceValueを両方実装した共通インタフェースです。

type ArrayOrSliceValue interface {
    Value
    Len() int
    Cap() int
    Elem(i int) Value
    // contains unexported methods
}

ArrayType型

ArrayTypeは、固定の配列型を表します。

type ArrayType struct {
    // contains unexported fields
}

(*ArrayType) Elem関数

func (t *ArrayType) Elem() Type

Elemは、配列の要素の型を返します。

(*ArrayType) Len関数

func (t *ArrayType) Len() int

Lenは、配列の要素数を返します。

ArrayValue型

ArrayValueは、配列を表します。

type ArrayValue struct {
    // contains unexported fields
}

(*ArrayValue) Cap関数

func (v *ArrayValue) Cap() int

Capは、配列のキャパシティを返します。(Len()と同じ)

(*ArrayValue) Elem関数

func (v *ArrayValue) Elem(i int) Value

Elemは、vのi番目の要素を返します。

(*ArrayValue) Len関数

func (v *ArrayValue) Len() int

Lenは、配列の長さを返します。

(*ArrayValue) Set関数

func (v *ArrayValue) Set(x *ArrayValue)

Setは、vにxを代入します。新しい値xはvと同じ型である必要があります。

(*ArrayValue) SetValue関数

func (v *ArrayValue) SetValue(x Value)

SetValueは、vに値xをセットします。

BoolType型

BoolTypeは、論理値型を表します。

type BoolType struct {
    // contains unexported fields
}

BoolValue型

BoolValueは、boolの値を表します。

type BoolValue struct {
    // contains unexported fields
}

(*BoolValue) Get関数

func (v *BoolValue) Get() bool

Getは、保持しているbool値を返します。

(*BoolValue) Set関数

func (v *BoolValue) Set(x bool)

Setは、vに値xをセットします。

(*BoolValue) SetValue関数

func (v *BoolValue) SetValue(x Value)

SetValueは、vに値xをセットします。

ChanDir型

ChanDirは、チャネルの型の方向を表します。

type ChanDir int
const (
    RecvDir ChanDir = 1 << iota
    SendDir
    BothDir = RecvDir | SendDir
)

(ChanDir) String関数

func (d ChanDir) String() string

ChanType型

ChanTypeは、チャネル型を表します。

type ChanType struct {
    // contains unexported fields
}

(*ChanType) Dir関数

func (t *ChanType) Dir() ChanDir

Dirは、チャネルの方向を返します。

(*ChanType) Elem関数

func (t *ChanType) Elem() Type

Elemは、チャネルの要素の型を返します。

ChanValue型

ChanValueは、チャネル(chan)を表します。

type ChanValue struct {
    // contains unexported fields
}

MakeChan関数

func MakeChan(typ *ChanType, buffer int) *ChanValue

MakeChanは、新しいチャネルを指定した型とバッファサイズで作成します。

(*ChanValue) Cap関数

func (v *ChanValue) Cap() int

(*ChanValue) Close関数

func (v *ChanValue) Close()

Closeは、チャネルをクローズします。

(*ChanValue) Closed関数

func (v *ChanValue) Closed() bool

Closedは、内部チャネルのclosed(c)の結果を返します。

(*ChanValue) Get関数

func (v *ChanValue) Get() uintptr

Getは、vのuintptr値を返します。これは主に出力の際に役立ちます。

(*ChanValue) IsNil関数

func (v *ChanValue) IsNil() bool

IsNilは、vがnilチャネルであるかを返します。

(*ChanValue) Len関数

func (v *ChanValue) Len() int

(*ChanValue) Recv関数

func (v *ChanValue) Recv() Value

Recvは、チャネルvから受信した値を返します。

(*ChanValue) Send関数

func (v *ChanValue) Send(x Value)

Sendは、チャネルvにxを送信します。

(*ChanValue) Set関数

func (v *ChanValue) Set(x *ChanValue)

Setは、vにxを代入します。新しい値xは、vと同じ型である必要があります。

(*ChanValue) SetValue関数

func (v *ChanValue) SetValue(x Value)

SetValueは、vにxをセットします。

(*ChanValue) TryRecv関数

func (v *ChanValue) TryRecv() Value

TryRecvは、チャネルvから値を受信しようと試みますがブロックはしません。受信できたときは値を返し、できなかったときはnilを返します。

(*ChanValue) TrySend関数

func (v *ChanValue) TrySend(x Value) bool

TrySendは、チャネルvにxを送信しようと試みますがブロックはしません。送信できたときはtrueを返し、できなかったときはfalseを返します。

ComplexType型

ComplexTypeは、complex型を表します。

type ComplexType struct {
    // contains unexported fields
}

ComplexValue型

ComplexValueは、complexの値を表します。

type ComplexValue struct {
    // contains unexported fields
}

(*ComplexValue) Get関数

func (v *ComplexValue) Get() complex128

Getは、内部のcomplex値を返します。

(*ComplexValue) Set関数

func (v *ComplexValue) Set(x complex128)

Setは、vに値xをセットします。

(*ComplexValue) SetValue関数

func (v *ComplexValue) SetValue(x Value)

SetValueは、vに値xをセットします。

FloatType型

FloatTypeは、float型を表します。

type FloatType struct {
    // contains unexported fields
}

FloatValue型

FloatValueは、floatの値を表します。

type FloatValue struct {
    // contains unexported fields
}

(*FloatValue) Get関数

func (v *FloatValue) Get() float64

Getは、内部のfloat値を返します。

(*FloatValue) Overflow関数

func (v *FloatValue) Overflow(x float64) bool

Overflowは、xがvの型を表現できないときにtrueを返します。

(*FloatValue) Set関数

func (v *FloatValue) Set(x float64)

Setは、vに値xをセットします。

(*FloatValue) SetValue関数

func (v *FloatValue) SetValue(x Value)

SetValueは、vに値xをセットします。

FuncType型

FuncTypeは、関数型を表します。

type FuncType struct {
    // contains unexported fields
}

(*FuncType) DotDotDot関数

func (t *FuncType) DotDotDot() bool

DotDotDotは、この関数の入力パラメータの最後が”…”パラメータであるときにtrueを返します。このとき、t.In(t.NumIn() – 1)は、このパラメータが持つ静的な型[]Tを返します。

具体的な例として、tがfunc(x int, y … float)のとき、次のようになります。

t.NumIn() == 2
t.In(0) is the reflect.Type for "int"
t.In(1) is the reflect.Type for "[]float"
t.DotDotDot() == true

(*FuncType) In関数

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

Inは、この関数のi番目の入力パラメータの型を返します。

(*FuncType) NumIn関数

func (t *FuncType) NumIn() int

NumInは、入力パラメータの数を返します。

(*FuncType) NumOut関数

func (t *FuncType) NumOut() int

NumOutは、関数の出力パラメータの数を返します。

(*FuncType) Out関数

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

Outは、この関数のi番目の出力パラメータの型を返します。

FuncValue型

FuncValueは、関数の値を表します。

type FuncValue struct {
    // contains unexported fields
}

(*FuncValue) Call関数

func (fv *FuncValue) Call(in []Value) []Value

Callは、関数fvを入力パラメータinとともに呼び出します。関数の出力パラメータがValueとして返ります。

(*FuncValue) Get関数

func (v *FuncValue) Get() uintptr

Getはvのuintptr値を返します。これは主に出力の際に役立ちます。

(*FuncValue) IsNil関数

func (v *FuncValue) IsNil() bool

IsNilは、vがnil関数であるかを返します。

(*FuncValue) Set関数

func (v *FuncValue) Set(x *FuncValue)

Setは、xにvを代入します。新しい値xはvと同じ型である必要があります。

(*FuncValue) SetValue関数

func (v *FuncValue) SetValue(x Value)

SetValueは、vに値xをセットします。

IntType型

IntTypeは、符号付整数型を表します。

type IntType struct {
    // contains unexported fields
}

IntValue型

IntValueは、intの値を表します。

type IntValue struct {
    // contains unexported fields
}

(*IntValue) Get関数

func (v *IntValue) Get() int64

Getは、内部のint値を返します。

(*IntValue) Overflow関数

func (v *IntValue) Overflow(x int64) bool

Overflowは、xがvの型を表現できないときにtrueを返します。

(*IntValue) Set関数

func (v *IntValue) Set(x int64)

Setは、vに値xをセットします。

(*IntValue) SetValue関数

func (v *IntValue) SetValue(x Value)

SetValueは、vに値xをセットします。

InterfaceType型

InterfaceTypeは、インタフェース型を表します。

type InterfaceType struct {
    // contains unexported fields
}

(*InterfaceType) Method関数

func (t *InterfaceType) Method(i int) (m Method)

Methodは、i番目のインタフェースメソッドを返します。

(*InterfaceType) NumMethod関数

func (t *InterfaceType) NumMethod() int

NumMethodは、インタフェースメソッドの数を返します。

InterfaceValue型

InterfaceValueは、インタフェースの値を表します。

type InterfaceValue struct {
    // contains unexported fields
}

(*InterfaceValue) Elem関数

func (v *InterfaceValue) Elem() Value

Elemは、インタフェース値v内の実際の値を返します。

(*InterfaceValue) Get関数

func (v *InterfaceValue) Get() [2]uintptr

Getは、ランタイム内のインタフェースを表す2つのワードを返します。これらワードは、危険な遊びをするときしか役立ちません。

(*InterfaceValue) IsNil関数

func (v *InterfaceValue) IsNil() bool

IsNilは、vがnilインタフェース値であるかを返します。

(*InterfaceValue) Method関数

func (v *InterfaceValue) Method(i int) *FuncValue

Methodは、vのi番目のメソッドに対応したFuncValueを返します。FuncValueを呼び出すときは、vをレシーバとして使用するので、引数にレシーバを指定する必要ありません。

(*InterfaceValue) Set関数

func (v *InterfaceValue) Set(x Value)

Setは、vに値xをセットします。

(*InterfaceValue) SetValue関数

func (v *InterfaceValue) SetValue(x Value)

SetValueは、vに値xをセットします。

Kind型

Kind は、Type型が表現している型の種別を表します。数値型のとき、Typeの動的な型より、詳細な情報をTypeは提供します。たとえば、float32のTypeは、FloatTypeですが、KindはFloat32となります。

Kindのゼロ値は、有効なKindではありません。

type Kind uint8
const (
    Bool Kind = 1 + iota
    Int
    Int8
    Int16
    Int32
    Int64
    Uint
    Uint8
    Uint16
    Uint32
    Uint64
    Uintptr
    Float
    Float32
    Float64
    Complex
    Complex64
    Complex128
    Array
    Chan
    Func
    Interface
    Map
    Ptr
    Slice
    String
    Struct
    UnsafePointer
)

(Kind) String関数

func (k Kind) String() string

MapType型

MapTypeは、マップ型を表します。

type MapType struct {
    // contains unexported fields
}

(*MapType) Elem関数

func (t *MapType) Elem() Type

Elemは、マップの要素型を返します。

(*MapType) Key関数

func (t *MapType) Key() Type

Keyは、マップのキーの型を返します。

MapValue型

MapValueは、マップの値を表します。

type MapValue struct {
    // contains unexported fields
}

MakeMap関数

func MakeMap(typ *MapType) *MapValue

MakeMapは、指定した型の新しいマップを作成します。

(*MapValue) Elem関数

func (v *MapValue) Elem(key Value) Value

Elemは、マップ内のkeyに関連付けられた値を返します。keyがマップ内に見つからなかったときはnilが返ります。

(*MapValue) Get関数

func (v *MapValue) Get() uintptr

Getは、vのuintptr値を返します。これは主に出力の際に役立ちます。

(*MapValue) IsNil関数

func (v *MapValue) IsNil() bool

IsNilは、vがnilマップ値であるかを返します。

(*MapValue) Keys関数

func (v *MapValue) Keys() []Value

Keysは、このマップ内のすべてキーを格納したスライスを返します。格納される順番は規定されていません。

(*MapValue) Len関数

func (v *MapValue) Len() int

Lenは、マップv内のキーの数を返します。

(*MapValue) Set関数

func (v *MapValue) Set(x *MapValue)

Setは、vにxを代入します。新しい値xはvと同じ型である必要があります。

(*MapValue) SetElem関数

func (v *MapValue) SetElem(key, val Value)

SetElemは、マップvにkeyに関連する値としてvをセットします。valがnilのときは、マップからキーが削除されます。

(*MapValue) SetValue関数

func (v *MapValue) SetValue(x Value)

SetValueは、vに値xをセットします。

Method型

Methodは、ひとつのメソッドを表します。

type Method struct {
    PkgPath string // 名前が大文字のときは空
    Name    string
    Type    *FuncType
    Func    *FuncValue
}

PtrType型

PtrTypeは、ポインタ型を表します。

type PtrType struct {
    // contains unexported fields
}

(*PtrType) Elem関数

func (t *PtrType) Elem() Type

Elemは、ポインタの要素の型を返します。

PtrValue型

PtrValueは、ポインタを表します。

type PtrValue struct {
    // contains unexported fields
}

(*PtrValue) Elem関数

func (v *PtrValue) Elem() Value

Elemは、vが指し示す値を返します。vがnilポインタのときは、nilを返します。

(*PtrValue) Get関数

func (v *PtrValue) Get() uintptr

Getはvのuintptr値を返します。これは主に出力の際に役立ちます。

(*PtrValue) IsNil関数

func (v *PtrValue) IsNil() bool

IsNilは、vがnilポインタであるかを返します。

(*PtrValue) PointTo関数

func (v *PtrValue) PointTo(x Value)

PointToは、vの指し示す先をxに変更します。xがnil値のとき、vにはnilがセットされます。

(*PtrValue) Set関数

func (v *PtrValue) Set(x *PtrValue)

Setは、vにxを代入します。新しい値xはvと同じ型である必要があります。

(*PtrValue) SetValue関数

func (v *PtrValue) SetValue(x Value)

SetValueは、vに値xをセットします。

SliceHeader型

スライスのランタイム表現です。

type SliceHeader struct {
    Data uintptr
    Len  int
    Cap  int
}

SliceType型

SliceTypeは、スライス型を表します。

type SliceType struct {
    // contains unexported fields
}

(*SliceType) Elem関数

func (t *SliceType) Elem() Type

Elemは、スライスの要素の型を返します。

SliceValue型

SliceValueは、スライスの値を表します。

type SliceValue struct {
    // contains unexported fields
}

MakeSlice関数

func MakeSlice(typ *SliceType, len, cap int) *SliceValue

MakeSliceは、指定したスライスの型、長さ、キャパシティをもつゼロ値で初期化された新しいスライスを作成します。

(*SliceValue) Cap関数

func (v *SliceValue) Cap() int

Capは、スライスのキャパシティを返します。

(*SliceValue) Elem関数

func (v *SliceValue) Elem(i int) Value

Elemは、vのi番目の要素を返します。

(*SliceValue) Get関数

func (v *SliceValue) Get() uintptr

Getはv.Cap()番目の要素のuintptrアドレスを返します。同じ配列から作成された全スライスで同じ値となります。これは主に出力の際に役立ちます。

(*SliceValue) IsNil関数

func (v *SliceValue) IsNil() bool

IsNilは、vがnilスライスであるかを返します。

(*SliceValue) Len関数

func (v *SliceValue) Len() int

Lenは、スライスの長さを返します。

(*SliceValue) Set関数

func (v *SliceValue) Set(x *SliceValue)

Setは、vにxを代入します。新しい値xはvと同じ型である必要があります。

(*SliceValue) SetLen関数

func (v *SliceValue) SetLen(n int)

SetLenは、vの長さを変更します。新しい長さnは0以上かつキャパシティ以下でなくてはなりません。

(*SliceValue) SetValue関数

func (v *SliceValue) SetValue(x Value)

SetValueは、vに値xをセットします。

(*SliceValue) Slice関数

func (v *SliceValue) Slice(beg, end int) *SliceValue

Sliceは、スライスvのサブスライスを返します。

StringHeader型

StringHeaderは、文字列のランタイム表現です。

type StringHeader struct {
    Data uintptr
    Len  int
}

StringType型

StringTypeは、文字列型を表します。

type StringType struct {
    // contains unexported fields
}

StringValue型

StringValueは、文字列の値を表します。

type StringValue struct {
    // contains unexported fields
}

(*StringValue) Get関数

func (v *StringValue) Get() string

Getは、内部の文字列値を返します。

(*StringValue) Set関数

func (v *StringValue) Set(x string)

Setは、vに値xをセットします。

(*StringValue) SetValue関数

func (v *StringValue) SetValue(x Value)

SetValueは、vに値xをセットします。

StructField型

type StructField struct {
    PkgPath   string // 名前が大文字のときは空
    Name      string
    Type      Type
    Tag       string
    Offset    uintptr
    Index     []int
    Anonymous bool
}

StructType型

StructTypeは、構造体型を表します。

type StructType struct {
    // contains unexported fields
}

(*StructType) Field関数

func (t *StructType) Field(i int) (f StructField)

Fieldは、i番目の構造体フィールドを返します。

(*StructType) FieldByIndex関数

func (t *StructType) FieldByIndex(index []int) (f StructField)

FieldByIndexは、indexに対応するネストしたフィールドを返します。

(*StructType) FieldByName関数

func (t *StructType) FieldByName(name string) (f StructField, present bool)

FieldByNameは、指定した名前の構造体フィールドと、フィールドが見つかったかを示す論理値を返します。

(*StructType) FieldByNameFunc関数

func (t *StructType) FieldByNameFunc(match func(string) bool) (f StructField, present bool)

FieldByNameFuncは、名前をmatch関数に渡したときにtrueを返す構造体フィールドと、フィールドが見つかったことを示す論理値を返します。

(*StructType) NumField関数

func (t *StructType) NumField() int

NumFieldは、構造体のフィールド数を返します。

StructValue型

StructValueは、構造体の値を表します。

type StructValue struct {
    // contains unexported fields
}

(*StructValue) Field関数

func (v *StructValue) Field(i int) Value

Fieldは、構造体のi番目のフィールドを返します。

(*StructValue) FieldByIndex関数

func (t *StructValue) FieldByIndex(index []int) (v Value)

FieldByIndexは、indexに対応するネストしたフィールドを返します。

(*StructValue) FieldByName関数

func (t *StructValue) FieldByName(name string) Value

FieldByNameeは、指定した名前の構造体フィールドを返します。フィールドが見つからなかったときはnilを返します。

(*StructValue) FieldByNameFunc関数

func (t *StructValue) FieldByNameFunc(match func(string) bool) Value

FieldByNameFuncは、名前をmatch関数に渡したときにtrueを返す構造体フィールドと、フィールドが見つかったことを示す論理値を返します。

(*StructValue) NumField関数

func (v *StructValue) NumField() int

NumFieldは、構造体のフィールド数を返します。

(*StructValue) Set関数

func (v *StructValue) Set(x *StructValue)

Setは、vにxを代入します。新しい値xはvと同じ型である必要があります。

(*StructValue) SetValue関数

func (v *StructValue) SetValue(x Value)

SetValueは、vに値xをセットします。

Type型

Typeは、Go言語の型のランタイム表現です。すべての型がここでリストされるメソッドを実装しています。いくつかの型は、さらに別のインタフェースを実装しています。Typeがどんな型であるか調べるには、型スイッチを使用してください。プログラム内の各型は、それぞれ固有のTypeを持っており、Type間の==演算子はGo言語の型の同一性と同じ扱いを受けます。

type Type interface {
    // PkgPathは、型のパッケージパスを返します。パッケージパスは、
    // パッケージの完全なインポートパスです。例:"container/vector"
    // 型が無名のときは、空文字列を返します。
    PkgPath() string

    // Nameは、型の(パッケージ内の)名前を返します。
    // 型が無名のときは、空文字列を返します。
    Name() string

    // Stringは、型の文字列表現を返します。
    // 文字列表現では、短縮したパッケージ名が使われます。
    // (例:"container/vector"の代わりとして"vector")
    // そのため、型の名前がユニークになるとは保証できません。
    // 型が同一か調べるには、直接Typeを比較してください。
    String() string

    // Sizeは、この型の値を格納するのに必要なバイト数を返します。
    // この関数は、unsafe.Sizeofと似ています。
    Size() uintptr

    // Bitsは、この型のサイズをビット数で返します。
    // これは、数値型で使われることを想定しており、
    // コンポジット型で使うとオーバフローを起こすかもしれません。
    Bits() int

    // Alignは、この型の値をメモリに割りつけたときの、
    // この型の値のアライメントを返します。
    Align() int

    // FieldAlignは、この型を構造体内のフィールドとして使用したときの、
    // この型の値のアライメントを返します。
    FieldAlign() int

    // Kindは、この型の種別を返します。
    Kind() Kind

    // インタフェース型ではないとき、Methodは、
    // Tをレシーバとするi番目のメソッドを返します。
    // インタフェース型のときは、Methodは、
    // インタフェース内のi番目のメソッドを返します。
    // NumMethodは、このようなメソッドの数を返します。
    Method(int) Method
    NumMethod() int
    // contains unexported methods
}

Typeof関数

func Typeof(i interface{}) Type

Typeofは、interface{}内の値のリフレクション型を返します。

UintType型

UintTypeは、uint型を表します。

type UintType struct {
    // contains unexported fields
}

UintValue型

UintValueは、uintの値を表します。

type UintValue struct {
    // contains unexported fields
}

(*UintValue) Get関数

func (v *UintValue) Get() uint64

Getは、内部のuint値を返します。

(*UintValue) Overflow関数

func (v *UintValue) Overflow(x uint64) bool

Overflowは、xがvの型を表現できないときにtrueを返します。

(*UintValue) Set関数

func (v *UintValue) Set(x uint64)

Setは、vに値xをセットします。

(*UintValue) SetValue関数

func (v *UintValue) SetValue(x Value)

SetValueは、vに値xをセットします。

UnsafePointerType型

UnsafePointerTypeは、unsafe.Pointer型を表します。

type UnsafePointerType struct {
    // contains unexported fields
}

UnsafePointerValue型

UnsafePointerValueは、unsafe.Pointerの値を表します。

type UnsafePointerValue struct {
    // contains unexported fields
}

(*UnsafePointerValue) Get関数

func (v *UnsafePointerValue) Get() uintptr

Getは、内部のuintptr値を返します。返される値はunsafe.Pointerではなくuintptrです。これは”unsafe”パッケージをインポートしていないプログラムでは、”reflect”から返されるunsafe.Pointerの値を受け取れないためです。

(*UnsafePointerValue) Set関数

func (v *UnsafePointerValue) Set(x unsafe.Pointer)

Setは、vに値xをセットします。

(*UnsafePointerValue) SetValue関数

func (v *UnsafePointerValue) SetValue(x Value)

SetValueは、vに値xをセットします。

Value型

Valueは、リフレクション値の共通インタフェースです。Valueの実装(例:ArrayValue、StructValue)は、さらに型ごとに規定されたメソッドを持ちます。

type Value interface {
    // Typeは、値の型を返します。
    Type() Type

    // Interfaceは、値をinterface{}として返します。
    Interface() interface{}

    // CanSetは、値が変更可能かを返します。
    // 値が、非エクスポートの構造体フィールドを使って得られたのであれば、
    // 取得はできますが設定はできません。
    // CanSet()がfalseを返すときに、型に実装されているSetを呼び出すと
    // クラッシュを引き起こします。
    CanSet() bool

    // SetValueは、この値にvを代入します。vは、この値と同じ型である必要があります。
    SetValue(v Value)

    // Addrは、内部データのポインタを返します。
    // これは、"unsafe"パッケージをインポートしている
    // 特殊なクライアント向けです。
    Addr() uintptr

    // Methodは、値が持つi番目のメソッドと対応したFuncValueを返します。
    // 返されたFuncValueを呼び出すときのパラメータにレシーバは
    // 含めないでください。
    // FuncValueは、この値をレシーバとして使用するためです。
    Method(i int) *FuncValue
    // contains unexported methods
}

Indirect関数

func Indirect(v Value) Value

Indirectは、vが指し示す値を返します。vがnilポインタのときはnilのValueが返ります。vがポインタでないときはv自身が返ります。

MakeZero関数

func MakeZero(typ Type) Value

MakeZeroは、指定した型のゼロ値を返します。

NewValue関数

func NewValue(i interface{}) Value

NewValueは、インタフェースi内の値で初期化された新しい値を返します。NewValue(nil)はnilを返します。