reflect

package
v1.23.0 Latest Latest
Warning

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

Go to latest
Published: Aug 14, 2024 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

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を返します。 その後の MapIter.KeyMapIter.Value、または MapIter.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が返す値は不特定です。 タグが明示的に空の文字列に設定されているかどうかを判断するには、StructTag.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() int

	FieldAlign() int

	Method(int) Method

	MethodByName(string) (Method, bool)

	NumMethod() int

	Name() string

	PkgPath() string

	Size() uintptr

	String() string

	Kind() Kind

	Implements(u Type) bool

	AssignableTo(u Type) bool

	ConvertibleTo(u Type) bool

	Comparable() bool

	Bits() int

	ChanDir() ChanDir

	IsVariadic() bool

	Elem() Type

	Field(i int) StructField

	FieldByIndex(index []int) StructField

	FieldByName(name string) (StructField, bool)

	FieldByNameFunc(match func(string) bool) (StructField, bool)

	In(i int) Type

	Key() Type

	Len() int

	NumField() int

	NumIn() int

	NumOut() int

	Out(i int) Type

	OverflowComplex(x complex128) bool

	OverflowFloat(x float64) bool

	OverflowInt(x int64) bool

	OverflowUint(x uint64) bool

	CanSeq() bool

	CanSeq2() bool
	// 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 deprecated

func PtrTo(t Type) Type

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

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

Deprecated: PointerTo によって置き換えられました。

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 TypeFor added in v1.22.0

func TypeFor[T any]() Type

TypeForは、型引数Tを表す Type を返します。

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メソッドを使用してください。型に適切でないメソッドを呼び出すと、ランタイムパニックが発生します。

ゼロ値は何も表していません。 その Value.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 SliceAt added in v1.23.0

func SliceAt(typ Type, p unsafe.Pointer, n int) Value

SliceAtは、基礎となるデータがpで始まり、長さと容量がnと等しいスライスを表す Value を返します。

これは unsafe.Slice のようなものです。

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

func (Value) CanComplex added in v1.18.0

func (v Value) CanComplex() bool

CanComplexは Value.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 は、 Value.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は、パニックなしで Value.Interface を使用できるかどうかを報告します。

func (Value) CanSet

func (v Value) CanSet() bool

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

func (Value) CanUint added in v1.18.0

func (v Value) CanUint() bool

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

func (Value) Cap

func (v Value) Cap() int

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

func (Value) Clear added in v1.21.0

func (v Value) Clear()

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

もしvのKindが Map または Slice でない場合、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が Interface または Pointer でない場合、パニックが発生します。 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)

Grow increases the slice's capacity, if necessary, to guarantee space for another n elements. After Grow(n), at least n elements can be appended to the slice without another allocation.

It panics if v's Kind is not a Slice or if n is negative or too large to allocate the memory.

func (Value) Index

func (v Value) Index(i int) Value

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

func (Value) Int

func (v Value) Int() int64

Intはvの基になる値をint64として返します。 vのKindが IntInt8Int16Int32 、または 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を返します。 Value.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がゼロ値である場合( Value.IsValid がfalseを返す場合)、KindはInvalidを返します。

func (Value) Len

func (v Value) Len() int

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

func (Value) MapIndex

func (v Value) MapIndex(key Value) Value

MapIndexは、マップv内のキーに関連付けられた値を返します。 vのKindが Map でない場合、パニックを起こします。 キーがマップ内に見つからない場合、または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のKindが Map でない場合、パニックを起こします。

イテレータを進めるには MapIter.Next を呼び出し、各エントリにアクセスするには MapIter.Key/MapIter.Value を呼び出します。 イテレータが終了した場合、MapIter.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が Struct でない場合は、パニックが発生します。

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が IntInt8Int16Int32 、または Int64 でない場合はパニックを発生させます。

func (Value) OverflowUint

func (v Value) OverflowUint(x uint64) bool

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

func (Value) Pointer

func (v Value) Pointer() uintptr

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

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

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

vのKindが String である場合、返されるポインタは文字列の基礎となるバイトの最初の要素を指します。

同等の結果を得るには、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) Seq added in v1.23.0

func (v Value) Seq() iter.Seq[Value]

Seqは、vの要素をループするiter.Seq[Value]を返します。 vの種類がFuncの場合、それは結果を持たず、型func(T) boolの単一の引数を取る 関数でなければなりません。 vの種類がPointerの場合、ポインタ要素の型はArrayでなければなりません。 それ以外の場合、vの種類はInt、Int8、Int16、Int32、Int64、 Uint、Uint8、Uint16、Uint32、Uint64、Uintptr、 Array、Chan、Map、Slice、またはStringでなければなりません。

func (Value) Seq2 added in v1.23.0

func (v Value) Seq2() iter.Seq2[Value, Value]

Seq2は、vの要素をループするiter.Seq2[Value, Value]を返します。 vの種類がFuncの場合、それは結果を持たず、 型func(K, V) boolの単一の引数を取る関数でなければなりません。 vの種類がPointerの場合、ポインタ要素の型はArrayでなければなりません。 それ以外の場合、vの種類はArray、Map、Slice、またはStringでなければなりません。

func (Value) Set

func (v Value) Set(x Value)

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

func (Value) SetBool

func (v Value) SetBool(x bool)

SetBoolはvの基になる値を設定します。 vのKindが Bool でない場合、または Value.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 が Complex64Complex128 ではない場合、または Value.CanSet が false の場合はパニックになります。

func (Value) SetFloat

func (v Value) SetFloat(x float64)

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

func (Value) SetInt

func (v Value) SetInt(x int64)

SetIntはvの基になる値をxに設定します。 vのKindが Int, Int8, Int16, Int32, Int64 でない場合、または Value.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と同様に、キーの要素はマップのキー型に代入可能でなければならず、 要素の値はマップの要素型に代入可能でなければなりません。

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の種類が UintUintptrUint8Uint16Uint32 、または Uint64 でない場合、または Value.CanSet がfalseの場合はパニックを起こします。

func (Value) SetZero added in v1.20.0

func (v Value) SetZero()

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

func (Value) Slice

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

Sliceはv[i:j]を返します。 vのKindが ArraySlice 、または String でない場合、または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が UintUintptrUint8Uint16Uint32 、または 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が ChanFuncMapPointerSliceString、または UnsafePointer でない場合はパニックを発生させます。

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

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

vのKindが String である場合、返されるポインタは文字列の基礎となるバイトの最初の要素を指します。

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