reflect

package
v1.21.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 24, 2023 License: MIT Imports: 2 Imported by: 0

Documentation

Overview

Package reflect はランタイムリフレクションを実装し、プログラムが任意の型のオブジェクトを操作できるようにします。典型的な使用方法は、静的型 interface{} の値を取り、TypeOf を呼び出してその動的な型情報を抽出することです。TypeOf は Type を返します。 ValueOf への呼び出しは、実行時データを表す Value を返します。Zero は Type を受け取り、その型のゼロ値を表す Value を返します。 Go におけるリフレクションの紹介については、「The Laws of Reflection」を参照してください: https://golang.org/doc/articles/laws_of_reflection.html

Index

Examples

Constants

View Source
const Ptr = Pointer

PtrはPointer種別の旧名称です。

Variables

This section is empty.

Functions

func Copy

func Copy(dst, src Value) int

Copyは、dstが満たされるか、srcが使い果たされるまで、srcの内容をdstにコピーします。 コピーされた要素の数を返します。 DstとsrcはそれぞれSliceまたはArrayの種類でなければならず、 dstとsrcは同じ要素の型でなければなりません。

特別な場合として、dstの要素の種類がUint8である場合、srcの種類はStringであることができます。

func DeepEqual

func DeepEqual(x, y any) bool

DeepEqualは、xとyが「深く等しい」という条件であるかどうかを報告します。 同一の型の2つの値は、次のどちらかの場合に深く等しいと見なされます。 異なる型の値は、決して深く等しくありません。

配列の値は、それぞれの要素が深く等しい場合に深く等しいと見なされます。

構造体の値は、対応するフィールド(公開されたものと非公開のもの)が深く等しい場合に深く等しいと見なされます。

関数の値は、どちらもnilの場合には深く等しく、それ以外の場合は深く等しくありません。

インタフェースの値は、深く等しい具体的な値を保持している場合に深く等しいと見なされます。

マップの値は、次のすべてが真である場合に深く等しいと見なされます: どちらもnilまたはどちらも非nilであり、長さが同じであり、 同じマップオブジェクトであるか、または対応するキー(Goの等値性を使用して一致する)が深く等しい値にマップされている場合。

ポインタの値は、Goの==演算子を使用して等しければ、深く等しいと見なされます。 または、深く等しい値を指している場合も深く等しくなります。

スライスの値は、次のすべてが真である場合に深く等しいと見なされます: どちらもnilまたはどちらも非nilであり、長さが同じであり、 同じ基礎配列の同じ初期エントリを指しているか(つまり、&x[0] == &y[0])または対応する要素(長さまで)が深く等しい場合。 非nilの空のスライスとnilのスライス(例:[]byte{}と[]byte(nil))は深く等しくありません。

他の値 - 数値、ブール値、文字列、およびチャネル - は、Goの==演算子を使用して等しい場合に深く等しいです。

一般的には、DeepEqualはGoの==演算子の再帰的な緩和です。 ただし、このアイデアは一貫性のないもので実装することは不可能です。 具体的には、値が自身に等しくない場合があります。 これは、func型であるため(一般的には比較できない)または浮動小数点NaN値であるためです または、そのような値を含む配列、構造体、またはインタフェースであるためです。 一方、ポインタの値は常に自身に等しく、それらがまたはそのような問題のある値を指している場合でも等しいため、 それらはGoの==演算子を使用して等しいため、その条件さえ満たせば、その内容に関係なく深く等しいと見なされます。 DeepEqualは、同じスライスまたは同じマップである場合、 コンテンツに関係なく深く等しいと見なされるように定義されています。

DeepEqualはデータ値をトラバースする中で、サイクルを検出することがあります。 DeepEqualが以前に比較したポインタの値を2回目以降比較するとき、それらを指す値を検査せずに等しいと見なします。 これにより、DeepEqualが終了することが保証されます。

func Swapper added in v1.8.0

func Swapper(slice any) func(i, j int)

Swapperは、与えられたスライス内の要素を交換する関数を返します。

与えられたインターフェースがスライスでない場合、Swapperはパニックを起こします。

Types

type ChanDir

type ChanDir int

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

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

func (ChanDir) String

func (d ChanDir) String() string

type Kind

type Kind uint

Kindは、Typeが表す特定の種類の型を表します。 ゼロのKindは有効な種類ではありません。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/reflect"
)

func main() {
	for _, v := range []any{"hi", 42, func() {}} {
		switch v := reflect.ValueOf(v); v.Kind() {
		case reflect.String:
			fmt.Println(v.String())
		case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
			fmt.Println(v.Int())
		default:
			fmt.Printf("unhandled kind %s", v.Kind())
		}
	}

}
Output:

hi
42
unhandled kind func
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 は k の名前を返します。

type MapIter added in v1.12.0

type MapIter struct {
	// contains filtered or unexported fields
}

MapIterは、マップを範囲指定するためのイテレータです。 Value.MapRangeを参照してください。

func (*MapIter) Key added in v1.12.0

func (iter *MapIter) Key() Value

Keyはiterの現在のマップエントリのキーを返します。

func (*MapIter) Next added in v1.12.0

func (iter *MapIter) Next() bool

Nextはマップイテレータを進め、別のエントリがあるかどうかを報告します。 iterが終了した場合はfalseを返します。Key、Value、またはNextへの後続の呼び出しはパニックを引き起こします。

func (*MapIter) Reset added in v1.18.0

func (iter *MapIter) Reset(v Value)

Reset は iter を v を参照するように変更します。 もし v の Kind が Map ではなく、かつ v がゼロ値でない場合にはパニックを起こします。 Reset(Value{}) は iter がどのマップも参照しないようにし、 以前に繰り返し処理されたマップがガベージコレクションされる可能性があります。

func (*MapIter) Value added in v1.12.0

func (iter *MapIter) Value() Value

Valueはiterの現在のマップエントリの値を返します。

type Method

type Method struct {
	// Nameはメソッド名です。
	Name string

	// PkgPathは、小文字(エクスポートされていない)のメソッド名を修飾するパッケージパスです。大文字(エクスポートされた)のメソッド名の場合は空です。
	// PkgPathとNameの組み合わせは、メソッドセット内のメソッドを一意に識別します。
	// https://golang.org/ref/spec#Uniqueness_of_identifiers を参照してください。
	PkgPath string

	Type  Type
	Func  Value
	Index int
}

Methodは単一のメソッドを表します。

func (Method) IsExported added in v1.17.0

func (m Method) IsExported() bool

IsExportedはメソッドがエクスポートされているかどうかを報告します。

type SelectCase added in v1.1.0

type SelectCase struct {
	Dir  SelectDir
	Chan Value
	Send Value
}

SelectCaseは、select操作内の1つのcaseを表します。 caseの種類は、Dir(通信の方向)に依存します。 もしDirがSelectDefaultである場合、caseはデフォルトのcaseを表します。 ChanとSendはゼロ値でなければなりません。 もしDirがSelectSendである場合、caseは送信操作を表します。 通常、Chanの基礎となる値はチャネルであり、Sendの基礎となる値はチャネルの要素型に代入可能でなければなりません。 特別な場合として、もしChanがゼロ値である場合、そのcaseは無視され、フィールドのSendも無視され、ゼロ値またはゼロ値でないどちらでもかまいません。 もしDirがSelectRecvである場合、caseは受信操作を表します。 通常、Chanの基礎となる値はチャネルであり、Sendはゼロ値でなければなりません。 もしChanがゼロ値である場合、そのcaseは無視されますが、Sendはゼロ値でなければなりません。 受信操作が選択されると、受信された値はSelectによって返されます。

type SelectDir added in v1.1.0

type SelectDir int

SelectDirはセレクト文の通信方向を表します。

const (
	SelectSend SelectDir
	SelectRecv
	SelectDefault
)

type SliceHeader

type SliceHeader struct {
	Data uintptr
	Len  int
	Cap  int
}

SliceHeaderはスライスのランタイム表現です。 これは安全でも可搬性がありませんし、将来のバージョンで変更されるかもしれません。 さらに、Dataフィールドだけではデータがガベージコレクトされないことを保証できないため、 プログラムは基礎データへの正しい型のポインタを別に保持する必要があります。

廃止予定: 代わりにunsafe.Sliceまたはunsafe.SliceDataを使用してください。

type StringHeader deprecated

type StringHeader struct {
	Data uintptr
	Len  int
}

StringHeaderは文字列のランタイム表現です。 安全かつ可搬性が保証されておらず、将来のリリースで表現が変わる可能性があります。 さらに、Dataフィールドだけではデータがガベージコレクションされないことは保証できないため、プログラムは基礎データへの正しい型付きポインタを別途保持する必要があります。

Deprecated: 代わりにunsafe.Stringまたはunsafe.StringDataを使用してください。

type StructField

type StructField struct {
	// Nameはフィールド名です。
	Name string

	// PkgPathは小文字(エクスポートされていない)のフィールド名を修飾するパッケージパスです。大文字(エクスポートされた)のフィールド名には空です。
	// 詳細はhttps://golang.org/ref/spec#Uniqueness_of_identifiersを参照してください。
	PkgPath string

	Type      Type
	Tag       StructTag
	Offset    uintptr
	Index     []int
	Anonymous bool
}

StructFieldはstruct内のフィールドを1つ記述します。

func VisibleFields added in v1.17.0

func VisibleFields(t Type) []StructField

VisibleFieldsはtの中のすべての可視フィールドを返します。tはstruct型である必要があります。 フィールドは、FieldByName呼び出しで直接アクセス可能ならば、可視として定義されます。 返されるフィールドには、無名structメンバー内のフィールドと非公開フィールドが含まれます。 これらは、struct内で見つかった順序と同じ並び順になります。無名フィールドは、即座にそれに続く昇格フィールドが続きます。

返されるスライスの各要素eに対応するフィールドは、値vのタイプtからv.FieldByIndex(e.Index)を呼び出すことで取得できます。

func (StructField) IsExported added in v1.17.0

func (f StructField) IsExported() bool

IsExportedはフィールドがエクスポートされているかどうかを報告します。

type StructTag

type StructTag string

StructTagは、structフィールドのタグ文字列です。

慣例として、タグ文字列はオプションでスペースで区切られたkey:"value"の連結です。 各キーは、スペース(U+0020 ' ')、引用符(U+0022 '"')、 コロン(U+003A ':')以外の非制御文字で構成される空でない文字列です。 各値は、U+0022 '"'文字とGoの文字列リテラル構文を使用して引用されます。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/reflect"
)

func main() {
	type S struct {
		F string `species:"gopher" color:"blue"`
	}

	s := S{}
	st := reflect.TypeOf(s)
	field := st.Field(0)
	fmt.Println(field.Tag.Get("color"), field.Tag.Get("species"))

}
Output:

blue gopher

func (StructTag) Get

func (tag StructTag) Get(key string) string

Getはtag文字列内のキーに関連付けられた値を返します。 もしtag内にそのようなキーが存在しない場合、Getは空の文字列を返します。 もしtagが従来の形式を持っていない場合、Getが返す値は不特定です。 タグが明示的に空の文字列に設定されているかどうかを判断するには、Lookupを使用してください。

func (StructTag) Lookup added in v1.7.0

func (tag StructTag) Lookup(key string) (value string, ok bool)

Lookupは、タグ文字列内のキーに関連する値を返します。 キーがタグ内に存在する場合、その値(空かもしれません)が返されます。 キーがタグに明示的に設定されていない場合、返される値は空の文字列になります。 okの返り値は、値がタグ文字列に明示的に設定されているかどうかを報告します。 タグに通常の形式がない場合、Lookupによって返される値は指定されていません。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/reflect"
)

func main() {
	type S struct {
		F0 string `alias:"field_0"`
		F1 string `alias:""`
		F2 string
	}

	s := S{}
	st := reflect.TypeOf(s)
	for i := 0; i < st.NumField(); i++ {
		field := st.Field(i)
		if alias, ok := field.Tag.Lookup("alias"); ok {
			if alias == "" {
				fmt.Println("(blank)")
			} else {
				fmt.Println(alias)
			}
		} else {
			fmt.Println("(not specified)")
		}
	}

}
Output:

field_0
(blank)
(not specified)

type Type

type Type interface {

	// Align returns the alignment in bytes of a value of
	// this type when allocated in memory.
	Align() int

	// FieldAlign returns the alignment in bytes of a value of
	// this type when used as a field in a struct.
	FieldAlign() int

	// Method returns the i'th method in the type's method set.
	// It panics if i is not in the range [0, NumMethod()).
	//
	// For a non-interface type T or *T, the returned Method's Type and Func
	// fields describe a function whose first argument is the receiver,
	// and only exported methods are accessible.
	//
	// For an interface type, the returned Method's Type field gives the
	// method signature, without a receiver, and the Func field is nil.
	//
	// Methods are sorted in lexicographic order.
	Method(int) Method

	// MethodByName returns the method with that name in the type's
	// method set and a boolean indicating if the method was found.
	//
	// For a non-interface type T or *T, the returned Method's Type and Func
	// fields describe a function whose first argument is the receiver.
	//
	// For an interface type, the returned Method's Type field gives the
	// method signature, without a receiver, and the Func field is nil.
	MethodByName(string) (Method, bool)

	// NumMethod returns the number of methods accessible using Method.
	//
	// For a non-interface type, it returns the number of exported methods.
	//
	// For an interface type, it returns the number of exported and unexported methods.
	NumMethod() int

	// Name returns the type's name within its package for a defined type.
	// For other (non-defined) types it returns the empty string.
	Name() string

	// PkgPath returns a defined type's package path, that is, the import path
	// that uniquely identifies the package, such as "encoding/base64".
	// If the type was predeclared (string, error) or not defined (*T, struct{},
	// []int, or A where A is an alias for a non-defined type), the package path
	// will be the empty string.
	PkgPath() string

	// Size returns the number of bytes needed to store
	// a value of the given type; it is analogous to unsafe.Sizeof.
	Size() uintptr

	// String returns a string representation of the type.
	// The string representation may use shortened package names
	// (e.g., base64 instead of "encoding/base64") and is not
	// guaranteed to be unique among types. To test for type identity,
	// compare the Types directly.
	String() string

	// Kind returns the specific kind of this type.
	Kind() Kind

	// Implements reports whether the type implements the interface type u.
	Implements(u Type) bool

	// AssignableTo reports whether a value of the type is assignable to type u.
	AssignableTo(u Type) bool

	// ConvertibleTo reports whether a value of the type is convertible to type u.
	// Even if ConvertibleTo returns true, the conversion may still panic.
	// For example, a slice of type []T is convertible to *[N]T,
	// but the conversion will panic if its length is less than N.
	ConvertibleTo(u Type) bool

	// Comparable reports whether values of this type are comparable.
	// Even if Comparable returns true, the comparison may still panic.
	// For example, values of interface type are comparable,
	// but the comparison will panic if their dynamic type is not comparable.
	Comparable() bool

	// Bits returns the size of the type in bits.
	// It panics if the type's Kind is not one of the
	// sized or unsized Int, Uint, Float, or Complex kinds.
	Bits() int

	// ChanDir returns a channel type's direction.
	// It panics if the type's Kind is not Chan.
	ChanDir() ChanDir

	// IsVariadic reports whether a function type's final input parameter
	// is a "..." parameter. If so, t.In(t.NumIn() - 1) returns the parameter's
	// implicit actual type []T.
	//
	// For concreteness, if t represents func(x int, y ... float64), then
	//
	//	t.NumIn() == 2
	//	t.In(0) is the reflect.Type for "int"
	//	t.In(1) is the reflect.Type for "[]float64"
	//	t.IsVariadic() == true
	//
	// IsVariadic panics if the type's Kind is not Func.
	IsVariadic() bool

	// Elem returns a type's element type.
	// It panics if the type's Kind is not Array, Chan, Map, Pointer, or Slice.
	Elem() Type

	// Field returns a struct type's i'th field.
	// It panics if the type's Kind is not Struct.
	// It panics if i is not in the range [0, NumField()).
	Field(i int) StructField

	// FieldByIndex returns the nested field corresponding
	// to the index sequence. It is equivalent to calling Field
	// successively for each index i.
	// It panics if the type's Kind is not Struct.
	FieldByIndex(index []int) StructField

	// FieldByName returns the struct field with the given name
	// and a boolean indicating if the field was found.
	FieldByName(name string) (StructField, bool)

	// FieldByNameFunc returns the struct field with a name
	// that satisfies the match function and a boolean indicating if
	// the field was found.
	//
	// FieldByNameFunc considers the fields in the struct itself
	// and then the fields in any embedded structs, in breadth first order,
	// stopping at the shallowest nesting depth containing one or more
	// fields satisfying the match function. If multiple fields at that depth
	// satisfy the match function, they cancel each other
	// and FieldByNameFunc returns no match.
	// This behavior mirrors Go's handling of name lookup in
	// structs containing embedded fields.
	FieldByNameFunc(match func(string) bool) (StructField, bool)

	// In returns the type of a function type's i'th input parameter.
	// It panics if the type's Kind is not Func.
	// It panics if i is not in the range [0, NumIn()).
	In(i int) Type

	// Key returns a map type's key type.
	// It panics if the type's Kind is not Map.
	Key() Type

	// Len returns an array type's length.
	// It panics if the type's Kind is not Array.
	Len() int

	// NumField returns a struct type's field count.
	// It panics if the type's Kind is not Struct.
	NumField() int

	// NumIn returns a function type's input parameter count.
	// It panics if the type's Kind is not Func.
	NumIn() int

	// NumOut returns a function type's output parameter count.
	// It panics if the type's Kind is not Func.
	NumOut() int

	// Out returns the type of a function type's i'th output parameter.
	// It panics if the type's Kind is not Func.
	// It panics if i is not in the range [0, NumOut()).
	Out(i int) Type
	// contains filtered or unexported methods
}

TypeはGoの型の表現です。

すべてのメソッドがすべての種類の型に適用されるわけではありません。制限がある場合は、各メソッドのドキュメントに記載されています。 kind-specificメソッドを呼び出す前に型の種類を知るためにKindメソッドを使用してください。型の種類に適切でないメソッドを呼び出すと、ランタイムパニックが発生します。

Typeの値は比較可能であり、==演算子などで使用することができます。 2つのTypeの値は、同一の型を表している場合に等しいとされます。

func ArrayOf added in v1.5.0

func ArrayOf(length int, elem Type) Type

ArrayOfは、与えられた長さと要素の型を持つ配列型を返します。 例えば、tがintを表す場合、ArrayOf(5, t)は[5]intを表します。

もし結果の型が利用可能なアドレススペースよりも大きくなる場合、ArrayOfはパニックを発生させます。

func ChanOf added in v1.1.0

func ChanOf(dir ChanDir, t Type) Type

ChanOfは指定された方向と要素の型を持つチャネル型を返します。 たとえば、tがintを表す場合、ChanOf(RecvDir, t)は<-chan intを表します。

gcのランタイムは、チャネルの要素型に64 kBの制限を課しています。 もしtのサイズがこの制限以上である場合、ChanOfはパニックを発生させます。

func FuncOf added in v1.5.0

func FuncOf(in, out []Type, variadic bool) Type

FuncOfは与えられた引数と戻り値の型を持つ関数型を返します。 例えば、kがintを表し、eがstringを表す場合、 FuncOf([]Type{k}, []Type{e}, false)はfunc(int) stringを表します。

可変引数の引数は、関数が可変引数かどうかを制御します。FuncOfは、 variadicがtrueであり、in[len(in)-1]がスライスを表していない場合にパニックを起こします。

func MapOf added in v1.1.0

func MapOf(key, elem Type) Type

MapOfは与えられたキーと要素の型のマップタイプを返します。 例えば、もしkがintを表し、eがstringを表すならば、MapOf(k, e)はmap[int]stringを表します。

もしキーの型が有効なマップキータイプではない場合(つまり、Goの==演算子を実装していない場合)、MapOfはパニックを起こします。

func PointerTo added in v1.18.0

func PointerTo(t Type) Type

PointerToは要素tを持つポインタ型を返します。 例えば、もしtがFoo型を表すなら、PointerTo(t)は*Fooを表します。

func PtrTo

func PtrTo(t Type) Type

PtrToは、要素tを持つポインタ型を返します。 例えば、もしtがFoo型を表すなら、PtrTo(t)は*Fooを表します。

PtrToはPointerToの古い綴りです。 これらの2つの関数は同じように動作します。

func SliceOf added in v1.1.0

func SliceOf(t Type) Type

SliceOfは要素の型がtのスライス型を返します。 例えば、tがintを表す場合、SliceOf(t)は[]intを表します。

func StructOf added in v1.7.0

func StructOf(fields []StructField) Type

StructOfはフィールドを含む構造体の型を返します。 OffsetとIndexのフィールドは無視され、コンパイラによって計算されます。

StructOfは現在、埋め込まれたフィールドに対してラッパーメソッドを生成せず、 非公開のStructFieldsが渡された場合はパニックします。 これらの制限は将来のバージョンで解除される可能性があります。

Example
package main

import (
	"github.com/shogo82148/std/bytes"
	"github.com/shogo82148/std/encoding/json"
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/reflect"
)

func main() {
	typ := reflect.StructOf([]reflect.StructField{
		{
			Name: "Height",
			Type: reflect.TypeOf(float64(0)),
			Tag:  `json:"height"`,
		},
		{
			Name: "Age",
			Type: reflect.TypeOf(int(0)),
			Tag:  `json:"age"`,
		},
	})

	v := reflect.New(typ).Elem()
	v.Field(0).SetFloat(0.4)
	v.Field(1).SetInt(2)
	s := v.Addr().Interface()

	w := new(bytes.Buffer)
	if err := json.NewEncoder(w).Encode(s); err != nil {
		panic(err)
	}

	fmt.Printf("value: %+v\n", s)
	fmt.Printf("json:  %s", w.Bytes())

	r := bytes.NewReader([]byte(`{"height":1.5,"age":10}`))
	if err := json.NewDecoder(r).Decode(s); err != nil {
		panic(err)
	}
	fmt.Printf("value: %+v\n", s)

}
Output:

value: &{Height:0.4 Age:2}
json:  {"height":0.4,"age":2}
value: &{Height:1.5 Age:10}

func TypeOf

func TypeOf(i any) Type

TypeOfは、iの動的な型を表す反射Typeを返します。 もしiがnilのインターフェース値である場合、TypeOfはnilを返します。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/io"
	"github.com/shogo82148/std/os"
	"github.com/shogo82148/std/reflect"
)

func main() {
	// インターフェース型は静的な型付けにしか使用されませんので、
	// インターフェース型Fooの反射Typeを見つけるための一般的な方法は、*Fooの値を使用するというものです。
	writerType := reflect.TypeOf((*io.Writer)(nil)).Elem()

	fileType := reflect.TypeOf((*os.File)(nil))
	fmt.Println(fileType.Implements(writerType))

}
Output:

true

type Value

type Value struct {
	// contains filtered or unexported fields
}

ValueはGo言語の値に対する反射インターフェースです。

すべてのメソッドがすべての種類の値に適用されるわけではありません。制限事項がある場合は、各メソッドのドキュメントに記載されています。 kind-specificメソッドを呼び出す前に、値の種類を特定するためにKindメソッドを使用してください。型に適切でないメソッドを呼び出すと、ランタイムパニックが発生します。

ゼロ値は何も表していません。 そのIsValidメソッドはfalseを返し、KindメソッドはInvalidを返し、Stringメソッドは"<invalid Value>"を返し、他のすべてのメソッドはパニックを発生させます。 ほとんどの関数やメソッドは無効な値を返さないでしょう。 もし返す場合は、そのドキュメントに条件が明示されています。

Valueは、基礎となるGoの値が同等の直接操作で並行に使用できる場合、複数のゴルーチンで同時に使用することができます。

2つのValueを比較するには、Interfaceメソッドの結果を比較してください。 ==を使用して2つのValueを比較すると、それらが表す基礎の値を比較しません。

func Append

func Append(s Value, x ...Value) Value

Appendは値xをスライスsに追加し、結果のスライスを返します。 Goのように、各xの値はスライスの要素の型に割り当て可能でなければなりません。

func AppendSlice

func AppendSlice(s, t Value) Value

AppendSliceは、スライスtをスライスsに追加し、結果のスライスを返します。 スライスsとtは同じ要素の型でなければなりません。

func Indirect

func Indirect(v Value) Value

Indirectは、vが指す値を返します。 vがnilポインターの場合、Indirectはゼロ値を返します。 vがポインターでない場合、Indirectはvを返します。

func MakeChan

func MakeChan(typ Type, buffer int) Value

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

func MakeFunc added in v1.1.0

func MakeFunc(typ Type, fn func(args []Value) (results []Value)) Value

MakeFuncは、与えられたTypeの新しい関数を返します。 この新しい関数は、呼び出されると以下の操作を実行します:

  • 引数をValuesのスライスに変換します。
  • results := fn(args)を実行します。
  • 結果を一つずつフォーマルな結果に対応するValuesのスライスとして返します。

fnの実装は、引数のValueのスライスがtypで与えられた引数の数と型を持っていると仮定できます。 typが可変長引数の関数を記述している場合、最後のValue自体が可変長引数を表すスライス(可変長引数の関数の本体と同じように)です。 fnによって返される結果のValueのスライスは、typで与えられた結果の数と型を持つ必要があります。

Value.Callメソッドを使用することで、呼び出し元はValuesを用いた型指定の関数を呼び出すことができます。 対照的に、MakeFuncは型指定の関数をValuesを用いて実装することを呼び出し元に許可します。

ドキュメントのExamplesセクションには、さまざまな型のスワップ関数を構築する方法の説明が含まれています。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/reflect"
)

func main() {
	// swapはMakeFuncに渡される実装です。
	// 事前に型を知らなくてもコードを書くことができるように、
	// reflect.Valuesを使用して動作する必要があります。
	swap := func(in []reflect.Value) []reflect.Value {
		return []reflect.Value{in[1], in[0]}
	}

	// makeSwapは、fptrがnil関数へのポインタであることを期待しています。
	// それは、MakeFuncで作成された新しい関数にそのポインタを設定します。
	// 関数が呼び出されると、reflectは引数をValuesに変換し、swapを呼び出し、swapの結果スライスを新しい関数の返り値として変換します。
	makeSwap := func(fptr any) {
		// fptrは関数へのポインタです。
		// リフレクト値として関数値自体(おそらくnil)を取得し、
		// その型をクエリできるようにするために値を設定します。
		fn := reflect.ValueOf(fptr).Elem()

		// 適切な型の関数を作成します。
		v := reflect.MakeFunc(fn.Type(), swap)

		// fnを表す値に割り当てる。
		fn.Set(v)
	}

	// int型のためのswap関数を作成して呼び出す。
	var intSwap func(int, int) (int, int)
	makeSwap(&intSwap)
	fmt.Println(intSwap(0, 1))

	// float64型のスワップ関数を作成して呼び出す。
	var floatSwap func(float64, float64) (float64, float64)
	makeSwap(&floatSwap)
	fmt.Println(floatSwap(2.72, 3.14))

}
Output:

1 0
3.14 2.72

func MakeMap

func MakeMap(typ Type) Value

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

func MakeMapWithSize added in v1.9.0

func MakeMapWithSize(typ Type, n int) Value

MakeMapWithSizeは、指定された型とおおよそのn個の要素のための初期空間を持つ新しいマップを作成します。

func MakeSlice

func MakeSlice(typ Type, len, cap int) Value

MakeSliceは指定したスライスの型、長さ、容量の新しいゼロ初期化されたスライス値を作成します。

func New

func New(typ Type) Value

Newは指定された型の新しいゼロ値へのポインタを表すValueを返します。 つまり、返されたValueのTypeはPointerTo(typ)です。

func NewAt

func NewAt(typ Type, p unsafe.Pointer) Value

NewAtは、pを指し示すポインタを使用して、指定された型の値へのポインタを表すValueを返します。

func Select added in v1.1.0

func Select(cases []SelectCase) (chosen int, recv Value, recvOK bool)

Selectは、ケースのリストによって説明されるselect操作を実行します。 Goのselect文と同様に、少なくとも1つのケースが進行できるまでブロックされ、一様な擬似乱数選択を行い、 その後、選択されたケースを実行します。選択されたケースのインデックスを返し、 もしケースが受信操作である場合は、受信した値と、その値がチャネルに送信された値と対応するかどうかを示す 真偽値を返します(チャネルがクローズされたためにゼロ値が受信された場合とは異なります)。 Selectは最大65536のケースをサポートしています。

func ValueOf

func ValueOf(i any) Value

ValueOfはインターフェースiに格納された具体的な値で初期化された新しいValueを返します。ValueOf(nil)はゼロのValueを返します。

func Zero

func Zero(typ Type) Value

Zeroは指定された型のゼロ値を表すValueを返します。 結果はValue構造体のゼロ値とは異なり、値が存在しないことを表します。 例えば、Zero(TypeOf(42))はKindがIntで値が0のValueを返します。 返された値はアドレスを取ることも変更することもできません。

func (Value) Addr

func (v Value) Addr() Value

Addrはvのアドレスを表すポインタ値を返します。 CanAddr()がfalseを返す場合にはパニックを発生させます。 Addrは通常、構造体のフィールドやスライスの要素に対して ポインタレシーバを必要とするメソッドを呼び出すために ポインタを取得するために使用されます。

func (Value) Bool

func (v Value) Bool() bool

Boolはvの基礎となる値を返します。 vの種類がBoolでない場合、パニックを起こします。

func (Value) Bytes

func (v Value) Bytes() []byte

Bytesはvの基礎となる値を返します。 vの基礎となる値がバイトのスライスまたはアドレスのつけられたバイトの配列でない場合、パニックを発生させます。

func (Value) Call

func (v Value) Call(in []Value) []Value

Callは引数inを使って関数vを呼び出します。 例えば、len(in) == 3の場合、v.Call(in)はGoの呼び出しv(in[0], in[1], in[2])を表します。 CallはvのKindがFuncでない場合にパニックを発生させます。 Callは結果をValuesとして返します。 Goと同様に、各入力引数は関数の対応する入力パラメータの型に代入可能でなければなりません。 もしvが可変引数関数である場合、Callは対応する値をコピーして可変引数スライスパラメータを作成します。

func (Value) CallSlice

func (v Value) CallSlice(in []Value) []Value

CallSliceは可変長関数vを入力引数inで呼び出し、スライスin[len(in)-1]をvの最終可変引数に割り当てます。 例えば、len(in) == 3の場合、v.CallSlice(in)はGoの呼び出しv(in[0], in[1], in[2]...)を表します。 CallSliceはvのKindがFuncでないか、可変引数でない場合にパニックを引き起こします。 出力結果はValuesとして返されます。 Goと同様に、各入力引数は関数の対応する入力パラメータの型に代入可能でなければなりません。

func (Value) CanAddr

func (v Value) CanAddr() bool

CanAddr関数は、値のアドレスをAddrで取得できるかどうかを報告します。 このような値は、addressableと呼ばれます。値がaddressableであるとは、 スライスの要素、addressableな配列の要素、addressableな構造体のフィールド、 またはポインタの参照結果である場合を指します。 CanAddrがfalseを返す場合、Addrを呼び出すとパニックが発生します。

func (Value) CanComplex added in v1.18.0

func (v Value) CanComplex() bool

CanComplexはComplexをパニックを起こさずに使用できるかどうかを報告します。

func (Value) CanConvert added in v1.17.0

func (v Value) CanConvert(t Type) bool

CanConvertは、値vが型tに変換可能かどうかを報告します。 v.CanConvert(t)がtrueを返す場合、v.Convert(t)はパニックしません。

func (Value) CanFloat added in v1.18.0

func (v Value) CanFloat() bool

CanFloat は、Float をパニックせずに使用できるかどうかを報告します。

func (Value) CanInt added in v1.18.0

func (v Value) CanInt() bool

CanIntはIntをパニックすることなく使用できるかどうかを報告します。

func (Value) CanInterface

func (v Value) CanInterface() bool

CanInterfaceは、パニックなしでInterfaceを使用できるかどうかを報告します。

func (Value) CanSet

func (v Value) CanSet() bool

CanSetはvの値を変更できるかどうかを報告します。 値はアドレス可能であり、非公開の構造体フィールドの使用では 取得されていない場合にのみ変更できます。 CanSetがfalseを返す場合、Setや任意のタイプ固有のセッター(例:SetBool、SetInt)を呼び出すとパニックが発生します。

func (Value) CanUint added in v1.18.0

func (v Value) CanUint() bool

CanUintは、パニックせずにUintを使用できるかどうかを報告します。

func (Value) Cap

func (v Value) Cap() int

Cap は v の容量を返します。 v の Kind が Array、Chan、Slice、または Array のポインタでない場合、パニックを発生させます。

func (Value) Clear added in v1.21.0

func (v Value) Clear()

Clearメソッドは、マップの内容をクリアするか、スライスの内容をゼロにします。

もしvのKindがマップまたはスライスでない場合、panicが発生します。

func (Value) Close

func (v Value) Close()

Closeはチャネルvを閉じます。 vの種類がChanでない場合はパニックを起こします。

func (Value) Comparable added in v1.20.0

func (v Value) Comparable() bool

Comparableは値vが比較可能かどうかを報告します。 もしvの型がインターフェースである場合、これは動的な型をチェックします。 もしこれがtrueを報告する場合、v.Interface() == x はどんなxに対してもパニックを起こしませんし、 v.Equal(u) もどんなValue uに対してもパニックを起こしません。

func (Value) Complex

func (v Value) Complex() complex128

Complexはvの基礎となる値、つまりcomplex128を返します。 vのKindがComplex64またはComplex128でない場合、パニックを発生させます。

func (Value) Convert added in v1.1.0

func (v Value) Convert(t Type) Value

Convert は値 v を型 t に変換した値を返します。 もし通常の Go の変換ルールによって値 v を型 t に変換することができない場合、または、v を型 t に変換する際にパニックが発生する場合、Convert はパニックを発生させます。

func (Value) Elem

func (v Value) Elem() Value

Elemは、インターフェースvに格納されている値またはvのポインタが指す値を返します。 vのKindがインターフェースまたはポインタでない場合、パニックが発生します。 vがnilの場合、ゼロのValueを返します。

func (Value) Equal added in v1.20.0

func (v Value) Equal(u Value) bool

Equalは、vがuと等しい場合にtrueを返します。 2つの無効な値に対して、Equalはtrueを返します。 インターフェース値の場合、Equalはインターフェース内の値を比較します。 それ以外の場合、値の型が異なる場合はfalseを返します。 また、配列や構造体の場合、Equalは順番に各要素を比較し、 等しくない要素が見つかった場合にfalseを返します。 すべての比較中、同じ型の値が比較され、その型が比較できない場合、Equalはパニックを引き起こします。

func (Value) Field

func (v Value) Field(i int) Value

Fieldはvのi番目のフィールドを返します。 vのKindがStructでない場合や、iが範囲外の場合にはパニックを起こします。

func (Value) FieldByIndex

func (v Value) FieldByIndex(index []int) Value

FieldByIndexは、インデックスに対応するネストされたフィールドを返します。 評価にはnilポインターを通過する必要があるか、または構造体でないフィールドの場合、パニックします。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/reflect"
)

func main() {
	// この例は、昇格されたフィールドの名前がその他のフィールドによって隠される場合のケースを示しています。FieldByNameは機能しないため、代わりにFieldByIndexを使用する必要があります。
	type user struct {
		firstName string
		lastName  string
	}

	type data struct {
		user
		firstName string
		lastName  string
	}

	u := data{
		user:      user{"Embedded John", "Embedded Doe"},
		firstName: "John",
		lastName:  "Doe",
	}

	s := reflect.ValueOf(u).FieldByIndex([]int{0, 1})
	fmt.Println("embedded last name:", s)

}
Output:

embedded last name: Embedded Doe

func (Value) FieldByIndexErr added in v1.18.0

func (v Value) FieldByIndexErr(index []int) (Value, error)

FieldByIndexErrは、インデックスに対応するネストしたフィールドを返します。 評価によってnilポインターを進める必要がある場合はエラーを返し、 structではないフィールドを進める必要がある場合はパニックを引き起こします。

func (Value) FieldByName

func (v Value) FieldByName(name string) Value

FieldByNameは指定された名前の構造体フィールドを返します。 フィールドが見つからない場合はゼロ値を返します。 vのKindがstructでない場合はパニックを起こします。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/reflect"
)

func main() {
	type user struct {
		firstName string
		lastName  string
	}
	u := user{firstName: "John", lastName: "Doe"}
	s := reflect.ValueOf(u)

	fmt.Println("Name:", s.FieldByName("firstName"))
}
Output:

Name: John

func (Value) FieldByNameFunc

func (v Value) FieldByNameFunc(match func(string) bool) Value

FieldByNameFuncは、マッチ関数を満たす名前を持つ構造体フィールドを返します。 vのKindがstructでない場合、パニックを起こします。 フィールドが見つからなかった場合、ゼロの値を返します。

func (Value) Float

func (v Value) Float() float64

Floatはvの基礎値をfloat64として返します。 もしvの種類がFloat32またはFloat64でない場合、パニックを起こします。

func (Value) Grow added in v1.20.0

func (v Value) Grow(n int)

func (Value) Index

func (v Value) Index(i int) Value

Indexはvのi番目の要素を返します。 vのKindがArray、Slice、またはStringでない場合、またはiが範囲外の場合はパニックが発生します。

func (Value) Int

func (v Value) Int() int64

Intはvの基になる値をint64として返します。 vのKindがInt、Int8、Int16、Int32、またはInt64でない場合、パニックします。

func (Value) Interface

func (v Value) Interface() (i any)

Interfaceは、vの現在の値をinterface{}として返します。 これは以下と同等です:

var i interface{} = (vの基底値)

もしValueが非公開の構造体フィールドにアクセスして取得された場合はパニックを起こします。

func (Value) InterfaceData

func (v Value) InterfaceData() [2]uintptr

InterfaceDataは未指定のuintptr値のペアを返します。 vの種類がInterfaceでない場合、エラーが発生します。

Goの以前のバージョンでは、この関数はインターフェースの値をuintptrのペアで返していました。 Go 1.4以降、インターフェースの値の実装はInterfaceDataの定義された使用を除外しています。

廃止予定: インターフェースの値のメモリ表現はInterfaceDataと互換性がありません。

func (Value) IsNil

func (v Value) IsNil() bool

IsNilは引数vがnilであるかどうかを報告します。引数は chan、func、interface、map、pointer、またはsliceの値である必要があります。そうでない場合、IsNilはパニックを引き起こします。注意点として、Go言語での通常のnilとの比較とは常に等しくありません。例えば、vが初期化されていないインターフェース変数iを使用してValueOfを呼び出した場合、i==nilはtrueとなりますが、v.IsNilはvがゼロ値であるためパニックを引き起こします。

func (Value) IsValid

func (v Value) IsValid() bool

IsValidは、vが値を表すかどうかを報告します。 vがゼロ値の場合はfalseを返します。 IsValidがfalseを返す場合、Stringを除いた他のメソッドはすべてパニックします。 ほとんどの関数やメソッドは無効な値を返しません。 無効な値を返す場合、そのドキュメントは明示的に条件を説明します。

func (Value) IsZero added in v1.13.0

func (v Value) IsZero() bool

IsZeroは、vが自身の型のゼロ値であるかどうかを報告します。 引数が無効な場合、パニックを引き起こします。

func (Value) Kind

func (v Value) Kind() Kind

KindはvのKindを返します。 もしvがゼロ値である場合(IsValidがfalseを返す場合)、KindはInvalidを返します。

func (Value) Len

func (v Value) Len() int

Lenはvの長さを返します。 vの種類がArray、Chan、Map、Slice、String、またはArrayのポインタでない場合、パニックを発生させます。

func (Value) MapIndex

func (v Value) MapIndex(key Value) Value

MapIndex は、マップ v に関連付けられたキーの値を返します。 v の Kind がマップでない場合、パニックが発生します。 key がマップ内に見つからない場合や v が nil マップを表す場合、ゼロ値が返されます。 Go と同様に、キーの値はマップのキーの型に代入可能でなければなりません。

func (Value) MapKeys

func (v Value) MapKeys() []Value

MapKeysは、マップ内に存在するすべてのキーを含むスライスを返します。 順序は指定されていません。 vのKindがMapでない場合、パニックを発生させます。 vがnilのマップを表す場合、空のスライスを返します。

func (Value) MapRange added in v1.12.0

func (v Value) MapRange() *MapIter

MapRangeはマップの範囲イテレータを返します。 vの種類がマップでない場合はパニックを起こします。

イテレータを進めるためにはNextを呼び出し、各エントリにアクセスするためにはKey/Valueを使用します。 イテレータが使い果たされるとNextはfalseを返します。 MapRangeはrange文と同じイテレーションのセマンティクスに従います。

例:

iter := reflect.ValueOf(m).MapRange()
for iter.Next() {
	k := iter.Key()
	v := iter.Value()
	...
}

func (Value) Method

func (v Value) Method(i int) Value

メソッドは、vのi番目のメソッドに対応する関数値を返します。 返された関数に対するCallの引数には、レシーバを含めないでください。 返された関数は常にvをレシーバとして使用します。 iが範囲外であるか、vがnilインターフェースの値である場合、Methodはパニックを引き起こします。

func (Value) MethodByName

func (v Value) MethodByName(name string) Value

MethodByNameは、指定された名前のメソッドに対応する関数値を返します。 返された関数に対するCallの引数には、レシーバを含めないでください。返された関数は常にvをレシーバとして使用します。 メソッドが見つからない場合、ゼロ値を返します。

func (Value) NumField

func (v Value) NumField() int

NumFieldは構造体vのフィールドの数を返します。 vのKindが構造体でない場合は、パニックが発生します。

func (Value) NumMethod

func (v Value) NumMethod() int

NumMethodは値のメソッドセット内のメソッド数を返します。

インターフェース型では、エクスポートされたメソッドと非エクスポートされたメソッドの数を返します。 インターフェース以外の型では、エクスポートされたメソッドの数を返します。

func (Value) OverflowComplex

func (v Value) OverflowComplex(x complex128) bool

OverflowComplex は complex128 型の x が v の型で表現できないかどうかを報告します。 もし v の Kind が Complex64 または Complex128 でない場合は、パニックを起こします。

func (Value) OverflowFloat

func (v Value) OverflowFloat(x float64) bool

OverflowFloatは、float64のxがvの型で表現できない場合にtrueを返します。 vの種類がFloat32またはFloat64でない場合、パニックを発生させます。

func (Value) OverflowInt

func (v Value) OverflowInt(x int64) bool

OverflowInt は、int64型のxがvの型で表現できない場合にtrueを返します。 vのKindがInt、Int8、Int16、Int32、またはInt64でない場合はパニックを発生させます。

func (Value) OverflowUint

func (v Value) OverflowUint(x uint64) bool

OverflowUintはuint64 xがvの型で表現できないかどうかを報告します。 vのKindがUint、Uintptr、Uint8、Uint16、Uint32、またはUint64でない場合は、panicします。

func (Value) Pointer

func (v Value) Pointer() uintptr

Pointerはvの値をuintptrとして返します。 vの種類がChan、Func、Map、Pointer、Slice、またはUnsafePointerでない場合はパニックが発生します。

vの種類がFuncの場合、返されるポインタは基礎となるコードポインタですが、 単一の関数を一意に識別するために必要なものではありません。 ただし、結果がゼロであることは、vがnilのfunc Valueである場合に限ります。

vの種類がSliceの場合、返されるポインタはスライスの最初の要素へのポインタです。 スライスがnilの場合、返される値は0です。 スライスが空で非nilの場合、返される値は0でない値です。

同等の結果を得るには、uintptr(Value.UnsafePointer())を使用することが推奨されます。

func (Value) Recv

func (v Value) Recv() (x Value, ok bool)

Recv はチャネル v から値を受信して返します。 v の Kind が Chan でない場合、パニックが発生します。 受信は値が準備されるまでブロックされます。 boolean 値 ok は、値 x がチャネル上の送信に対応する場合は true、チャネルが閉じられているために受信したゼロ値の場合は false です。

func (Value) Send

func (v Value) Send(x Value)

Sendはチャネルvにxを送信します。 vの種類がChanでないか、xの型がvの要素の型と異なる場合、パニックを引き起こします。 Go言語のように、xの値はチャネルの要素の型に代入可能でなければなりません。

func (Value) Set

func (v Value) Set(x Value)

Setはxに値vを割り当てます。 CanSetがfalseを返す場合、パニックを発生させます。 Go言語と同様に、xの値はvの型に割り当て可能であり、 非公開フィールドから派生していない必要があります。

func (Value) SetBool

func (v Value) SetBool(x bool)

SetBoolはvの基になる値を設定します。 vのKindがBoolでない場合、またはCanSet()がfalseの場合はパニックを発生させます。

func (Value) SetBytes

func (v Value) SetBytes(x []byte)

SetBytesはvの基本値を設定します。 vの基本値がバイトのスライスでない場合、パニックを引き起こします。

func (Value) SetCap added in v1.2.0

func (v Value) SetCap(n int)

SetCapはvの容量をnに設定します。 vの種類がSliceでない場合や、nがスライスの長さより小さく、 スライスの容量よりも大きい場合は、パニックを引き起こします。

func (Value) SetComplex

func (v Value) SetComplex(x complex128)

SetComplex は v の基礎値を x に設定します。 もし v の Kind が Complex64 や Complex128 ではない場合、または CanSet() が false の場合はパニックになります。

func (Value) SetFloat

func (v Value) SetFloat(x float64)

SetFloatはvの基底値をxに設定します。 vのKindがFloat32またはFloat64でない場合、またはCanSet()がfalseの場合、パニックが発生します。

func (Value) SetInt

func (v Value) SetInt(x int64)

SetIntはvの基になる値をxに設定します。 vのKindがInt, Int8, Int16, Int32, Int64でない場合、またはCanSet()がfalseの場合、パニックとなります。

func (Value) SetIterKey added in v1.18.0

func (v Value) SetIterKey(iter *MapIter)

SetIterKeyはiterの現在のマップエントリのキーをvに割り当てます。 これはv.Set(iter.Key())と同等ですが、新しいValueを割り当てることを回避します。 Goと同様に、キーはvの型に割り当て可能である必要があり、 非公開フィールドから派生していない必要があります。

func (Value) SetIterValue added in v1.18.0

func (v Value) SetIterValue(iter *MapIter)

SetIterValue は iter の現在のマップエントリの値を v に割り当てます。 v.Set(iter.Value()) と同等ですが、新しい Value を割り当てることを避けます。 Go と同様に、値は v の型に割り当て可能である必要があり、 非公開フィールドから派生していない必要があります。

func (Value) SetLen

func (v Value) SetLen(n int)

SetLenはvの長さをnに設定します。 vのKindがSliceでない場合や、nが負の値であるか スライスの容量よりも大きい場合には、パニックを発生させます。

func (Value) SetMapIndex

func (v Value) SetMapIndex(key, elem Value)

SetMapIndexはマップv内のキーに関連付けられている要素をelemに設定します。 vのKindがMapでない場合はパニックを発生させます。 elemがゼロ値の場合、SetMapIndexはマップからキーを削除します。 さらに、vがnilのマップを保持している場合は、SetMapIndexはパニックを発生させます。 Go言語と同様に、keyのelemはマップのキーの型に割り当て可能でなければならず、 elemの値はマップのelemの型に割り当て可能でなければなりません。

func (Value) SetPointer

func (v Value) SetPointer(x unsafe.Pointer)

SetPointerは、[unsafe.Pointer]の値であるvをxに設定します。 vの種類がUnsafePointerでない場合、パニックを起こします。

func (Value) SetString

func (v Value) SetString(x string)

SetStringはvの基礎となる値をxに設定します。 vのKindがStringでない場合、またはCanSet()がfalseの場合はパニックを発生させます。

func (Value) SetUint

func (v Value) SetUint(x uint64)

SetUintはvの基になる値をxに設定します。 vの種類がUint、Uintptr、Uint8、Uint16、Uint32、またはUint64でない場合、またはCanSet()がfalseの場合はパニックを起こします。

func (Value) SetZero added in v1.20.0

func (v Value) SetZero()

SetZeroはvをvの型のゼロ値に設定します。 CanSetがfalseを返す場合はパニックを発生させます。

func (Value) Slice

func (v Value) Slice(i, j int) Value

Sliceはv[i:j]を返します。 vのKindが配列、スライス、または文字列でない場合、またはvがアドレス指定できない配列、またはインデックスが範囲外の場合はpanicします。

func (Value) Slice3 added in v1.2.0

func (v Value) Slice3(i, j, k int) Value

Slice3はスライス操作の3つのインデックス形式です:v[i:j:k]を返します。 もしvの種類がArrayまたはSliceでない場合、またはvがアドレス不可能な配列である場合、 もしくはインデックスが範囲外の場合、panicを発生させます。

func (Value) String

func (v Value) String() string

Stringは、文字列vの基礎となる値を文字列として返します。 Stringは、GoのStringメソッドの規約による特別なケースです。 他のゲッターと異なり、vのKindがStringでない場合でもエラーにはなりません。 代わりに、"<T value>"という形式の文字列を返します。ここで、Tはvの型です。 fmtパッケージは、Valueを特別扱いします。暗黙的にStringメソッドを呼び出さず、代わりに保持している具体的な値を表示します。

func (Value) TryRecv

func (v Value) TryRecv() (x Value, ok bool)

TryRecvはチャネルvから値を受信しようとしますが、ブロックしません。 vのKindがChanでない場合、パニックが発生します。 受信が値を配信する場合、xは転送された値であり、okはtrueです。 ブロックすることなく受信を完了できない場合、xはゼロ値であり、okはfalseです。 チャネルが閉じられている場合、xはチャネルの要素型のゼロ値であり、okはfalseです。

func (Value) TrySend

func (v Value) TrySend(x Value) bool

TrySend はチャネル v に x を送信しようと試みますが、ブロックしません。 v の種類が Chan でない場合は、パニックを発生させます。 値が送信されたかどうかを報告します。 Go のように、x の値はチャネルの要素型に割り当て可能である必要があります。

func (Value) Type

func (v Value) Type() Type

Typeはvの型を返します。

func (Value) Uint

func (v Value) Uint() uint64

Uintはvの基礎値をuint64として返します。 vのKindがUint、Uintptr、Uint8、Uint16、Uint32、またはUint64でない場合にはパニックを発生させます。

func (Value) UnsafeAddr

func (v Value) UnsafeAddr() uintptr

UnsafeAddrはvのデータへのポインタを、uintptrとして返します。 vがアドレス可能でない場合、panicします。

同等の結果を得るためには、uintptr(Value.Addr().UnsafePointer())を使用することが推奨されます。

func (Value) UnsafePointer added in v1.18.0

func (v Value) UnsafePointer() unsafe.Pointer

UnsafePointerはvの値を[unsafe.Pointer]として返します。 vのKindがChan、Func、Map、Pointer、Slice、またはUnsafePointerでない場合はパニックを発生させます。

vのKindがFuncの場合、返されるポインタは基礎となるコードポインタですが、必ずしも単一の関数を一意に識別するためのものではありません。 唯一の保証は、vがnil func Valueである場合にのみ結果がゼロであることです。

vのKindがSliceの場合、返されるポインタはスライスの最初の要素へのポインタです。スライスがnilの場合、返される値もnilです。 スライスが空であるが非nilの場合、返される値は非nilです。

type ValueError

type ValueError struct {
	Method string
	Kind   Kind
}

ValueErrorは、ValueメソッドがサポートされていないValueに対してValueメソッドが呼び出された場合に発生します。このような場合は、各メソッドの説明に記載されています。

func (*ValueError) Error

func (e *ValueError) Error() string

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL